ruby on rails - एक टेस्ट चलाने के लिए rspec कैसे?




ruby-on-rails ruby-on-rails-3 (9)

मुझे ऑनलाइन सभी प्रकार के लिंक मिल गए हैं लेकिन कोई भी जो वर्तमान नहीं है और दिखाता है कि एक परीक्षण कैसे चलाया जाए।

मेरे पास निम्न फ़ाइल है:

/spec/controllers/groups_controller_spec.rb

मैं उस स्पेक को चलाने के लिए टर्मिनल में किस कमांड का उपयोग करता हूं और मैं किस आदेश में कमांड चलाता हूं?

मेरी मणि फ़ाइल:

# Test ENVIRONMENT GEMS
group :development, :test do
    gem "autotest"
    gem "rspec-rails", "~> 2.4"
    gem "cucumber-rails", ">=0.3.2"
    gem "webrat", ">=0.7.2"
    gem 'factory_girl_rails'
    gem 'email_spec'
end

spec फ़ाइल

require 'spec_helper'

describe GroupsController do
  include Devise::TestHelpers

  describe "GET yourgroups" do
    it "should be successful and return 3 items" do

      Rails.logger.info 'HAIL MARRY'

      get :yourgroups, :format => :json
      response.should be_success
      body = JSON.parse(response.body)
      body.should have(3).items # @user1 has 3 permissions to 3 groups
    end
  end
end

रेल 5 में,

मैंने एकल परीक्षण फ़ाइल चलाने के लिए इस तरह से उपयोग किया (एक फ़ाइल में सभी परीक्षण)

rails test -n /TopicsControllerTest/ -v

वांछित फ़ाइल TopicsControllerTest से मिलान करने के लिए कक्षा का नाम उपयोग किया जा सकता है

मेरी कक्षा class TopicsControllerTest < ActionDispatch::IntegrationTest

आउटपुट:

यदि आप चाहते हैं कि आप एकल परीक्षण विधि से मेल खाने के लिए रेगेक्स को \TopicsControllerTest#test_Should_delete\ कर सकते हैं \TopicsControllerTest#test_Should_delete\

rails test -n /TopicsControllerTest#test_Should_delete/ -v

@apneadiving जवाब इसे हल करने का एक साफ तरीका है। हालांकि, अब हमारे पास रुपेक 3.3 में एक नई विधि है। हम लाइन नंबर का उपयोग करने के बजाय बस rspec spec/unit/baseball_spec.rb[#context:#it] चला सकते हैं। here: से लिया गया here:

आरएसपीसी 3.3 उदाहरणों की पहचान करने के लिए एक नया तरीका पेश करता है [...]

उदाहरण के लिए, यह आदेश:

$ rspec spec/unit/baseball_spec.rb[1:2,1:4] ... spec / unit / baseball_spec.rb में परिभाषित प्रथम शीर्ष-स्तर समूह के तहत परिभाषित दूसरा और चौथा उदाहरण या समूह चलाएगा।

तो rspec spec/unit/baseball_spec.rb:42 करने के बजाय rspec spec/unit/baseball_spec.rb:42 जहां यह (लाइन 42 में परीक्षण) पहला परीक्षण है, हम बस rspec spec/unit/baseball_spec.rb:[1:1] या rspec spec/unit/baseball_spec.rb:[1:1:1] परीक्षण केस कितना rspec spec/unit/baseball_spec.rb:[1:1:1] इस पर निर्भर करता है।


आप spec कमांड को रेगेक्स पास कर सकते हैं जो केवल आपके द्वारा प्रदान किए जाने वाले नाम से मेल खाने वाले ब्लॉक को चलाएगा।

spec path/to/my_spec.rb -e "should be the correct answer"

आप ऐसा कुछ कर सकते हैं:

 rspec/spec/features/controller/spec_file_name.rb
 rspec/spec/features/controller_name.rb         #run all the specs in this controller

एक मणि ' watchr ' है जो फ़ाइल में किसी भी कोड परिवर्तन को ट्रैक कर सकता है और आपके लिए स्वचालित रूप से परीक्षण चला सकता है


कई विकल्प हैं:

rspec spec                           # All specs
rspec spec/models                    # All specs in the models directory
rspec spec/models/a_model_spec.rb    # All specs in the some_model model spec
rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line 'nn'
rspec -e"text from a test"           # Runs specs that match the text
rspec spec --tag focus               # Runs specs that have :focus => true
rspec spec --tag focus:special       # Run specs that have :focus => special
rspec spec --tag focus ~skip         # Run tests except those with :focus => true

मॉडल के लिए, यह केवल लाइन नंबर 5 पर मामला चलाएगा

bundle exec rspec spec/models/user_spec.rb:5

नियंत्रक के लिए: यह केवल लाइन नंबर 5 पर मामला चलाएगा

bundle exec rspec spec/controllers/users_controller_spec.rb:5

सिग्नल मॉडल या नियंत्रक के लिए ऊपर से लाइन नंबर हटाएं

सभी मॉडलों पर मामला चलाने के लिए

bundle exec rspec spec/models

सभी नियंत्रक पर मामला चलाने के लिए

bundle exec rspec spec/controllers

सभी मामलों को चलाने के लिए

 bundle exec rspec 

यह देखते हुए कि आप rspec 2 के साथ रेल 3 प्रोजेक्ट पर हैं, रेल रूट निर्देशिका से:

  bundle exec rspec spec/controllers/groups_controller_spec.rb 

निश्चित रूप से काम करना चाहिए। मैं टाइपिंग से थक गया था इसलिए मैंने 'बंडल exec rspec' को 'bersp' में छोटा करने के लिए उपनाम बनाया

'बंडल निष्पादन' इतना है कि यह आपके मणि फ़ाइल में निर्दिष्ट सटीक मणि पर्यावरण लोड करता है: http://gembundler.com/

'Spec' कमांड से 'rspec' कमांड में रुपेसी 2 स्विच किया गया।


विशिष्ट परीक्षण चलाने के लिए मेरी पसंदीदा विधि थोड़ा अलग है - मैंने लाइनों को जोड़ा

  RSpec.configure do |config|
    config.filter_run :focus => true
    config.run_all_when_everything_filtered = true
  end

मेरी spec_helper फ़ाइल के लिए।

अब, जब भी मैं एक विशिष्ट परीक्षण (या संदर्भ, या spec) चलाने के लिए चाहता हूं, तो मैं बस इसे "फोकस" टैग जोड़ सकता हूं, और अपना परीक्षण सामान्य के रूप में चला सकता हूं - केवल केंद्रित परीक्षण चलेंगे। अगर मैं सभी फोकस टैग हटा देता हूं, तो run_all_when_everything_filtered सामान्य रूप से सभी परीक्षणों को चलाता है और चलाता है।

यह कमांड लाइन विकल्पों के जितना तेज़ और आसान नहीं है - आपको उस परीक्षण के लिए फ़ाइल को संपादित करने की आवश्यकता होती है, जिसे आप चलाने के लिए चाहते हैं। लेकिन यह आपको बहुत अधिक नियंत्रण देता है, मुझे लगता है।





rspec