কীভাবে একটি একক আরএসপেক পরীক্ষা চালানো যায়?


306

আমার কাছে নিম্নলিখিত ফাইল রয়েছে:

/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

স্পেক ফাইল:

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

আপনি বান্ডেল এক্সিকিউটিভ আরএসপিএকের মতো আপনার পরীক্ষাগুলি চালাতে পারেন lers এখানে আরও তথ্য: kolosek.com/rails-rspec-setup
নেশা জোরিক

bundle exec rspec spec --helpআপনাকে উত্তরটি দেবে:
টমাস ডেকাউক্স

উত্তর:


15

এটি কতক্ষণ মৌমাছি উপলভ্য তা নিশ্চিত নয় তবে রান ফিল্টারিংয়ের জন্য একটি আরএসপেক কনফিগারেশন রয়েছে - তাই এখন আপনি এটি এটিকে যুক্ত করতে পারেন spec_helper.rb:

RSpec.configure do |config|
  config.filter_run_when_matching :focus
end

এবং তারপরে একটি ফোকাস ট্যাগ যুক্ত করুন it, contextবা describeকেবলমাত্র সেই ব্লক চালাতে:

it 'runs a test', :focus do
  ...test code
end

আরএসপেক ডকুমেন্টেশন:

https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method


1
এর জন্য অবকাঠামোগত পরিবর্তন প্রয়োজন। এবং এটি ফিরে পরিবর্তন মনে আছে। আমি এটি না করার এবং rspecউপযুক্ত প্যারামিটার দিয়ে অনুমিতটি চালানোর জন্য কেবলমাত্র আদেশগুলি ব্যবহার করার পরামর্শ দিচ্ছি যা
মাইকেল ডুরান্ট

482

সাধারণত আমি করি:

rspec ./spec/controllers/groups_controller_spec.rb:42

যেখানে 42আমি চালাতে চাই সেই পরীক্ষার লাইনের প্রতিনিধিত্ব করে।

EDIT1:

আপনি ট্যাগ ব্যবহার করতে পারে। এখানে দেখুন ।

সম্পাদনা 2:

চেষ্টা করুন:

bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42

ধন্যবাদ চেষ্টা করেছি যে যখন আমি স্পেক / স্পেক /পাঠ করি তখন এটি কার্যকর হয় না ..: এক্সএক্স আমি ত্রুটিটি পাই / সিস্টেম / লাইব্রেরি / ফ্রেমওয়ার্কস / রবি.ফ্রেমওয়ার্ক / ভার্সন / ১.৮/usr/bin/ruby -S বান্ডেল এক্সিকিউটিভ আরএসপিপেক ./spec/controllers/groups_controller_spec.rb ./spec/controllers/incoming_mails_controller_spec.rb ./spec/lib/mailing_job/mailingjob_find_reply_spec.rb ./spec/models/group_model_spec.rb ./spec/models/user_model_spec.rb
AnApprentice

আমি যদি কেবল আরএসপিইসি ব্যবহার করার চেষ্টা করি তবে আমি এই ত্রুটিটি পেয়েছি: "$ আরএসপিইসি স্পেক / কন্ট্রোলার / গোষ্ঠী_কন্ট্রোলার_স্পেক.আরবি: ১৯ / লাইব্রেরি / রবি / গেমস / ১.৮ / জেমস / বান্ডিলার ১.০.০ / লিবি / বুন্ডার / রুনটাইম.আরব २:27 : `সেটআপে: আপনি ইতিমধ্যে আরএসপেক-কোর ২.6.২ সক্রিয় করেছেন, তবে আপনার জেমফাইলে আরএসপেক-কোর ২.6.০ প্রয়োজন bu বান্ডেল এক্সিকিউটি ব্যবহারের কথা বিবেচনা করুন Ge (রত্ন :: লোডেরর)"
অ্যানপ্রেইনটিস

আপনি "বান্ডেল এক্সিকিউটিভ আরএসপিপ স্পেক / কন্ট্রোলার / গোষ্ঠী_কন্ট্রোলার_স্পেক.আরবি: ১৯" চেষ্টা করতে পারেন
মুফিনিস্ট

বান্ডেল এক্সিকিউট কাজ করল কেন? এটি এড়ানোর কোনও উপায় কি হ্যাক?
অ্যানপ্রেন্টিস

11
এটি কোনও হ্যাক নয়, এটি নিশ্চিত করে যে আপনি নিজের রত্নখণ্ডারে ঘোষিত একই সংস্করণটি ব্যবহার করেছেন। আপনার ক্ষেত্রে, নিছক rspecব্যর্থ হয়েছে কারণ আপনার সিস্টেমের সংস্করণটি আপনার রত্নখচিত সংস্করণের চেয়ে সাম্প্রতিক।
21

67

রাক সহ:

rake spec SPEC=path/to/spec.rb

(ক্রেডিট এই উত্তরে যায় Go যান তাকে ভোট দিন))

সম্পাদনা (@ সিরোসন্টিলিকে ধন্যবাদ): অনুমানের মধ্যে একটি নির্দিষ্ট দৃশ্য চালনা করতে আপনাকে বর্ণনার সাথে মিলে যাওয়া একটি রেজেক্স প্যাটার্ন ম্যাচ সরবরাহ করতে হবে।

rake spec SPEC=path/to/spec.rb \
          SPEC_OPTS="-e \"should be successful and return 3 items\""

11
এটি সর্বোত্তম উত্তর কারণ এটি 'আরকে স্পেক' কমান্ডটি ব্যবহার করে না তবে 'আরএসপিেক' কমান্ড ব্যবহার করে। তার মানে পরীক্ষার ডাটাবেসটি প্রতিটি সময় সঠিকভাবে পুনরায় আরম্ভ করা হয় (যা আপনি 'আরএসপেক ...' ব্যবহার করলে তা ঘটে না)
jpw

আপনি SPEC=path/to/spec.rb:42প্রদত্ত লাইন নম্বরটিতে পরীক্ষা চালাতে ব্যবহার করতে পারেন , যদিও মনে হয় যে কোনও it_behaves_likeপরীক্ষাও চালানো হবে (বাগ?)
মিগল্ড

61

আপনি অনুমান কমান্ডে একটি রেইজেক্স পাস করতে পারেন যা কেবল itআপনার সরবরাহ করা নামের সাথে মেলে ব্লকগুলি চালাবে ।

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

2019 আপডেট: আরএসপেক 2 'স্পেস' কমান্ড থেকে 'আরএসপেক' কমান্ডে স্যুইচ করেছে।


ধন্যবাদ আমি চেষ্টা করেছিলাম তবে এতে ত্রুটি রয়েছে: ke রেক স্পিপ স্পিক / কন্ট্রোলার / ইনকামিং_মেলস_কন্ট্রোলার_স্পেক.আরবি -e "সফল হওয়া উচিত এবং 3 টি আইটেম" রেক বাতিল হওয়া উচিত! (বিবর্তন): 1: `স্ট্যান্ডার্ড_রেক_অ্যাপশনগুলিতে: সংকলন ত্রুটি (ইওওয়াল): 1: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত শিক্ষানবিশ, প্রত্যাশায় expect শেষটি সফল হবে এবং 3 টি আইটেম ফিরিয়ে দিন
এন্টারপ্রেন্টিস

আসল স্পেক ফাইল আইডিয়া নিয়ে আপডেট হয়েছে?
অ্যানপ্রেন্টিস

আপনার একটি সংকলন ত্রুটি থাকলে, আপনার স্পেকটি বৈধ রুবি নয়। নিশ্চিত করুন যে আপনি একটি অনুপস্থিত না হয় তা নিশ্চিত doএকটি পর it, contextবা describeঘোষণা।
ডগলাস এফ শিয়েরার

1
এটি "স্পেক", "রেক স্পেক" নয়।
মফিনিস্তা

এই সঠিক উত্তর হওয়া উচিত, একটি লাইন নম্বর সম্পর্কিত গুরুতর ভুল - যে কোনও ক্ষেত্রে
ইউজেন মেয়ার

27

অনেকগুলি বিকল্প রয়েছে:

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

23

নির্দিষ্ট পরীক্ষা চালানোর জন্য আমার পছন্দের পদ্ধতিটি কিছুটা আলাদা - আমি লাইনগুলি যুক্ত করেছি

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

আমার স্পেশাল_হেল্পার ফাইলের কাছে।

এখন, যখনই আমি একটি নির্দিষ্ট পরীক্ষা (বা প্রসঙ্গ বা স্পেক) চালাতে চাই, আমি কেবল এতে "ফোকাস" ট্যাগ যুক্ত করতে পারি এবং আমার পরীক্ষাটি স্বাভাবিক হিসাবে চালাতে পারি - কেবলমাত্র কেন্দ্রিক পরীক্ষা (গুলি) চালানো হবে। যদি আমি সমস্ত ফোকাস ট্যাগগুলি সরিয়ে ফেলি তবে run_all_when_everything_filteredকিক্সগুলি সাধারণভাবে সমস্ত টেস্ট চালায়।

কমান্ড লাইন বিকল্পগুলির মতো এটি তাত্ক্ষণিক এবং সহজ নয় - এটির জন্য যে পরীক্ষাটি চালাতে চান তাতে ফাইল সম্পাদনা করা দরকার। তবে এটি আপনাকে অনেক বেশি নিয়ন্ত্রণ দেয়, আমি অনুভব করি।


আমি অবশ্যই এই স্টাইলটি পছন্দ করি, কারণ আমি সাধারণত রুবাইমিন / ইন্টিলিজের মাধ্যমে পরীক্ষা চালাচ্ছি। আমি এই পদ্ধতিটিও পছন্দ করি কারণ এটি
জুঁইতে

9

এই উত্তরটি সমাধান করার একটি সুন্দর উপায় হ'ল @ পঠন উত্তর। তবে, এখন আমাদের কাছে আরএসপেক ৩.৩ এ একটি নতুন পদ্ধতি রয়েছে। আমরা কেবল rspec spec/unit/baseball_spec.rb[#context:#it]একটি লাইন নম্বর ব্যবহার না করে চালাতে পারি । এখান থেকে নেওয়া :

আরএসপেক ৩.৩ উদাহরণগুলি সনাক্ত করার জন্য একটি নতুন উপায় প্রবর্তন করেছে [...]

উদাহরণস্বরূপ, এই আদেশ:

$ rspec spec/unit/baseball_spec.rb[1:2,1:4] … অনুমান / ইউনিট / বেসবল_স্পেক.আরবি সংজ্ঞায়িত প্রথম শীর্ষ স্তরের গ্রুপের অধীনে সংজ্ঞায়িত ২ য় এবং চতুর্থ উদাহরণ বা গোষ্ঠী পরিচালনা করবে run

সুতরাং rspec spec/unit/baseball_spec.rb:42এটি যেখানে পরীক্ষা করার পরিবর্তে (লাইনের ৪২ টেস্টে পরীক্ষা) প্রথম পরীক্ষা, আমরা কেবল পরীক্ষার কেসটি কীভাবে নেস্টেড করে তার উপর নির্ভর করে rspec spec/unit/baseball_spec.rb[1:1]বা করতে পারি rspec spec/unit/baseball_spec.rb[1:1:1]


5

রেল 5 এ,

আমি একক পরীক্ষার ফাইল চালাতে এই পদ্ধতিটি ব্যবহার করেছি (একটি ফাইলের সমস্ত পরীক্ষা)

rails test -n /TopicsControllerTest/ -v

শ্রেণীর নাম কাঙ্ক্ষিত ফাইলের সাথে মেলে ব্যবহার করা যেতে পারে TopicsControllerTest

আমার ক্লাস class TopicsControllerTest < ActionDispatch::IntegrationTest

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি চান তবে আপনি একক পরীক্ষার পদ্ধতির সাথে মিলিয়ে তুলতে রেজিট্সটিকে টুইঙ্ক করতে পারেন \TopicsControllerTest#test_Should_delete\

rails test -n /TopicsControllerTest#test_Should_delete/ -v

4

মডেলটির জন্য, এটি কেবল 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 

3

আপনার প্রকল্পের মূল ডিরেক্টরি থেকে আদেশগুলি চালান:

# run all specs in the project's spec folder
bundle exec rspec 

# run specs nested under a directory, like controllers
bundle exec rspec spec/controllers

# run a single test file
bundle exec rspec spec/controllers/groups_controller_spec.rb

# run a test or subset of tests within a file
# e.g., if the 'it', 'describe', or 'context' block you wish to test
# starts at line 45, run:
bundle exec rspec spec/controllers/groups_controller_spec.rb:45

1

আরএসপেক 2 দিয়ে শুরু করে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

# in spec/spec_helper.rb
RSpec.configure do |config|
  config.filter_run :focus => true
  config.run_all_when_everything_filtered = true
end

# in spec/any_spec.rb
describe "something" do
  it "does something", :focus => true do
    # ....
  end
end

0

দেওয়া হয়েছে আপনি আরএসপেক 2 সহ একটি রেল 3 প্রকল্পে রয়েছেন, রেল রুট ডিরেক্টরি থেকে:

  bundle exec rspec spec/controllers/groups_controller_spec.rb 

অবশ্যই কাজ করা উচিত। আমি টাইপ করতে করতে ক্লান্ত হয়ে পড়েছি যাতে আমি 'বান্ডিল এক্সিকিউটি আরএসপিপেক' থেকে 'বার্স্প' ছোট করার জন্য একটি উপাত্ত তৈরি করেছি

'বান্ডেল এক্সিকিউট' এমনটি হ'ল যাতে এটি আপনার মণি ফাইলটিতে নির্দিষ্ট রত্ন পরিবেশকে লোড করে: http://gembundler.com/

আরএসপেক 2 'স্পেস' কমান্ড থেকে 'আরএসপেক' কমান্ডে স্যুইচ করেছে।


0

আমি আমার পরীক্ষাটি স্বয়ংক্রিয়ভাবে চালাতে এই প্রহরী রত্নটি ব্যবহার করি। এটি টেস্ট ফাইলটিতে অপারেশন তৈরি বা আপডেট করার পরে পরীক্ষা চালায়।

https://github.com/guard/guard-test

অথবা সাধারণত আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে চালাতে পারেন

আরএসপেক স্পেক / নিয়ন্ত্রক / গোষ্ঠী_কন্ট্রোলার_স্পেক.আরবি



0

তুমি ব্যবহার করতে পার

 rspec spec/controllers/groups_controller_spec.rb:<line_number>

লাইন নম্বরটি 'বর্ণনা' বা 'এটি' রেখার লাইন সংখ্যা হওয়া উচিত যাতে এটি নির্দিষ্ট ব্লকের মধ্যে উপস্থিত পরীক্ষাগুলি চালায়। পরিবর্তে এটি লাইন_ নাম্বারের পাশের সমস্ত লাইন সম্পাদন করবে।

এছাড়াও আপনি কাস্টম নামের সাথে ব্লক তৈরি করতে পারেন এবং কেবলমাত্র সেইগুলি ব্লকগুলি কার্যকর করতে পারেন।


0

আর একটি সাধারণ ভুলটি এখনও পুরানো রেল অ্যাপ্লিকেশনগুলি বা তার জন্য 5+++ এ আপগ্রেড করা এবং require 'spec_helper'প্রতিটি পরীক্ষার ফাইলের শীর্ষে রাখা file এটি পরিবর্তন করা উচিত require 'rails_helper'। যদি আপনি রেক টাস্ক ( rake spec) এবং যখন আপনি একটি একক স্পেস ( rspec path/to/spec.rb) চালনা করেন তার মধ্যে আলাদা আচরণ দেখতে পান , তবে এটি একটি সাধারণ কারণ

সেরা সমাধান হয়

1) নিশ্চিত হয়ে নিন যে আপনি require 'rails_helper'আপনার প্রতিটি স্পেক ফাইলের শীর্ষে ব্যবহার করছেন - পুরানো শৈলীর require 'spec_helper' 2 নয়) rake spec SPEC=path/to/spec.rbসিনট্যাক্সটি ব্যবহার করুন

rspec path/to/spec.rbআমার মনে হয় যে পুরানো শৈলীটি আমার মনে হয় ২০২০ সালে এই সময়ে সম্প্রদায়ের দ্বারা প্রচলিত ধারণা বিবেচনা করা উচিত (তবে অবশ্যই আপনি এটি কাজে আসবেন, অন্যান্য বিবেচ্য বিষয়গুলি বাদ দিয়ে)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.