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


168

আমি একক ফাইলের সাথে সমস্ত পরীক্ষা চালাতে পারি:

rake test TEST=path/to/test_file.rb

তবে, আমি যদি সেই ফাইলটিতে কেবল একটি পরীক্ষা চালাতে চাই, তবে আমি কীভাবে এটি করব?

আমি অনুরূপ কার্যকারিতা খুঁজছি:

rspec path/to/test_file.rb -l 25

3
8 বছর পরে এবং রেলপথের জন্য 5+ ব্যবহারকারীরা rails test path/to/test_file.rb:25@ ডেরিক_হিল উত্তরগুলি দেখুন
গাইডগুলি

উত্তর:


44

আমি আরএসপেক পথ / থেকে / file.rb -l 25 তে অনুরূপ কার্যকারিতা খুঁজছি

হা! ব্যবহারের নিক Quaranto এর "M" মণি । এটি দিয়ে আপনি বলতে পারেন:

m spec/my_spec.rb:25

4
যখন উত্তরটি কাজ করে এবং ঠিক তেমনই জিজ্ঞাসা করা হয়েছিল :-) একটি একক পরীক্ষা চালানোর মিনি টেস্টের উপায়টি নাম মেলানো (মিঃ গ্রিমের উত্তর দেখুন)। যদি আপনি এটি চেষ্টা করে দেখে থাকেন এবং তা প্রত্যাখ্যান করেন তবে নিক-রত্নের মতো অ-মানক বিকল্পগুলি চেষ্টা করার সময় এসেছে।
নোটপ্যাচ

3
সত্য, আমি একমত। আমি আসলেই চাই আমি আপনাকে একটি বিকল্প হিসাবে প্রবেশ করতে পারি ... বা সেই মিনিস্টেস্ট কেবল লাইন নম্বর পাশাপাশি পদ্ধতির নাম ব্যবহার করে সমর্থন করেছে।
এলিয়ট উইঙ্কলার


যদিও এই রত্নটি একক পরীক্ষা চালানোর জন্য আরএসপিপ পদ্ধতির অনুরূপ তৈরি করে, মিনিটেষ্টের একটি একক পরীক্ষা চালানোর জন্য অন্তর্নির্মিত উপায় রয়েছে যা হ'ল প্রশ্ন। নির্ভরতা প্রয়োজন হয় না। এটি জেনে রাখা ভাল যে কোনও আনুষাঙ্গিক রত্ন (যেমন চারপাশে অনেকগুলি থাকতে পারে) দিয়ে সহজ হতে পারে তবে আমি মনে করি যে এই প্রশ্নের জন্য, জডুয়ান বা র্যান্ডমোরের মতো খাঁটি ন্যূনতম উত্তরগুলি আরও ভাল ফিট করতে পারে
cefigueiredo

209

আদেশটি হ'ল:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"

6
+1 - আপনি যা করতে চান এটি এটি। আপনি যদি একটি নির্দিষ্ট ফাইলের সব পরীক্ষা পরীক্ষা করতে চান তাহলে, শুধু ছেড়ে TESTOPTS=...দূরে
awenkhh

খুব দরকারী উত্তর। আমি পরীক্ষার রিপোর্টের শেষে ব্যর্থ পরীক্ষার পুনর্বার আদেশগুলি পুনরায় দেখাতে MinitestReporter তৈরি করি। দেখুন: gist.github.com/foton/141b9f73caccf13ccfcc
ফোটন

1
কি করে -v?
জন স্নাইডার

149

আপনি চেষ্টা করেছেন:

ruby path/to/test_file.rb --name test_method_name

10
মিনিসপেক ব্যবহার করে পরীক্ষাগুলির জন্য কী, যেমন সংজ্ঞায়িত specify {}? যারা কেবল দেখায় test_0001_anonymous... এবং একাধিক test_0001_anonymousগুলি হতে পারে যদি একই সিনট্যাক্সগুলি একাধিক বর্ণনা ব্লকগুলিতে ব্যবহার করা হয় ... এই জাতীয় পরিবেশে একক পরীক্ষা চালানোর জন্য কোনও পরামর্শ?
নীজার

1
"টিসি" এর অর্থ "পরীক্ষার কেস"।
অ্যান্ড্রু গ্রিম

4
এটা বলে cannot load such file -- test_helper
এক্স-ইউরি

11
ব্যবহারের ruby -Itest path/to/tc_file.rb --name test_method_nameমত stackoverflow.com/a/15714985/327786
TlmaK0

bundle exec ruby -I lib path/to --name test_fit
পুচু


49

এই string name definitionপরীক্ষাগুলি সম্পর্কে আমাকে বিরক্ত করার একটি বিষয় ।

যখন তোমার আছে:

def test_my_test
end

আপনি সর্বদা জানেন যে কীভাবে আপনার পরীক্ষার নামকরণ করা হয়েছে যাতে আপনি এটির মতো এটি সম্পাদন করতে পারেন:

ruby my_test -n test_my_test

তবে যখন আপনার মতো কিছু থাকে:

it "my test" do
end

আপনি কখনই নিশ্চিত নন যে কীভাবে এই পরীক্ষার অভ্যন্তরীণ নামকরণ করা হয়েছে যাতে আপনি -nসরাসরি অপশনটি ব্যবহার করতে পারবেন না ।

এই পরীক্ষার নাম কীভাবে অভ্যন্তরীণভাবে নামকরণ করা হয়েছে তা জানতে আপনার কেবল একটি বিকল্প রয়েছে: লগগুলিতে সন্ধানের জন্য পুরো ফাইলটি কার্যকর করুন।

আমার কাজের ভিত্তিটি (সাময়িকভাবে) পরীক্ষার নামের সাথে কিছু যুক্ত করে যা খুব অনন্য:

it "my test xxx" do
end

এবং তারপরে '-n' প্যারামিটারের RegEx সংস্করণটি ব্যবহার করুন :

ruby my_test.rb -n /xxx/

6
-n প্যারামিটারের রেজেক্স ভার্সনটি ছিল তথ্যগুলির ক্লাচ টুকরো, ধন্যবাদ!
ওহাহাদে

নোট করুন যে আপনি __method__বর্তমানে সম্পাদনকারী পদ্ধতির প্রসঙ্গে (এই পরীক্ষায় আপনার পরীক্ষা) প্রবন্ধের মধ্যে কল করে এটি পরীক্ষা করতে পারেন । বর্তমান বাস্তবায়নের ফলস্বরূপ এরকম কিছু ঘটে "does not break my stuff".gsub(" ", "_").prepend("test_")। তারপরে রান করুন, উদাহরণস্বরূপ ruby -Itest test/integration/stuff_flow_test.rb --name test_does_not_break_my_stuff,।
TK-421

33

আপনি যদি রেল 5+ সহ মিনি টেস্ট ব্যবহার করেন তবে একটি একক ফাইলে সমস্ত পরীক্ষা চালানোর সেরা উপায় হ'ল:

bin/rails test path/to/test_file.rb

এবং একটি একক পরীক্ষার জন্য (যেমন 25 লাইনে):

bin/rails test path/to/test_file.rb:25

Http://guides.rubyonrails.org/testing.html#the-rails-test-runner দেখুন


23

আপনি একটি একক ফাইল চালাতে এটি ব্যবহার করতে পারেন:

rake test TEST=test/path/to/file.rb

আমিও ব্যবহার করেছি

ruby -I"lib:test" test/path/to/file.rb

আরও ভাল প্রদর্শনের জন্য।


12

এটি করার 2 টি উপায় রয়েছে:

  1. 'ম্যানুয়ালি' পরীক্ষা চালান (অ্যান্ড্রু গ্রিমের উত্তর দেখুন)।
  2. Rake::TestTaskএকটি ভিন্ন পরীক্ষা লোডার ব্যবহার করতে হ্যাক লক্ষ্য।

Rake::TestTask(রেক 0.8.7 থেকে) তাত্ত্বিকভাবে কমান্ড লাইন বিকল্পের MiniTest::Unitসাহায্যে অতিরিক্ত বিকল্পগুলি পাস করতে সক্ষম হয় "TESTOPTS=blah-blah", উদাহরণস্বরূপ:

% রেক পরীক্ষা

অনুশীলনে, --nameরাক ইন্টার্নালগুলির কারণে বিকল্প (পরীক্ষার নামের জন্য একটি ফিল্টার) কাজ করবে না। এটি ঠিক করার জন্য আপনাকে আপনার রেকফাইলে একটি ছোট বানর প্যাচ লিখতে হবে:

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}

এই প্যাচটির জন্য আপনাকে একটি ফাইল তৈরি করতে হবে test/my-minitest-loader.rb:

ARGV.each { |f|
  break if f =~ /^-/
  load f
}

মিনিটেষ্টের জন্য সমস্ত সম্ভাব্য বিকল্প মুদ্রণ করতে টাইপ করুন

% রুবি-আর মিনিটেষ্ট / অটোরুন -e '' - - সহায়তা lp

3
মনে রাখবেন যে প্রাথমিক উদাহরণটি আরও সাম্প্রতিক rake(0.9.2) দিয়ে সঠিকভাবে কাজ করে এবং কোনও বানরের প্যাচ প্রয়োজন হয় না।
বিভ্রান্তি

1
আমি যখন রেক সংস্করণ 10.5.0 দিয়ে চেষ্টা করেছি তখন TESTOPTS="--name test_foobar"কাজ করে না, তবে TESTOPTS="--name=test_foobar"কাজ করে।
কংকিউ

11

আপনি --nameতার নাম বা একটি নাম দিয়ে একটি পরীক্ষা চালাতে পাস করতে পারেন :

-n, --name PATTERN               Filter run on /regexp/ or string.

উদাহরণ:

$ ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil

এই পতাকাটি মিনিটেষ্টের README এ নথিভুক্ত করা হয়েছে


1

আপনি যদি মিনিটেষ্টের সাথে টার্ন মণি ব্যবহার করছেন তবে কেবল Turn.config.patternবিকল্পটি ব্যবহার নিশ্চিত করুন যেহেতু টার্ন মিনিটেষ্ট রানার এআরজেগুলিতে - নাম বিকল্পটিকে সম্মান করে না।


টার্নটি nameবিকল্পটি গিলে ফেলছে তা বুঝতে আমার এই ইঙ্গিতটি ছিল । ধন্যবাদ! সেই টার্নটি আর রক্ষণাবেক্ষণ করা হচ্ছে না, তাই আমি ন্যূনতম-সাংবাদিকদের কাছে স্থানান্তরিত করার পরিকল্পনা করছি
পিডবব ২

1

আমি অনুরূপ কার্যকারিতা খুঁজছি:

rspec পাথ / থেকে / test_file.rb -l 25 l

একটা মণি যে ঠিক যে আছে হল: minitest-line

gem install minitest-line
ruby test/my_file -l 5

https://github.com/judofyr/minitest-line#minitest-line থেকে


হাই @ ক্রিসহফ, আপনি ঠিক কী কাজ করছে না তা বর্ণনা করতে পারেন (যেমন একটি ত্রুটি বার্তা)? সর্বনিম্ন রেখার রত্নটির উদ্দেশ্য কেবলমাত্র মিনি টেস্টে একটি পরীক্ষা চালানো। এটি যদি কাজ না করে তবে আপনি মিনিটস্টেটিং-লাইনে একটি বাগ খুঁজে পেতে পারেন।
knugie

1

আমি ব্যবহার করি ruby /path/to/test -n /distinguishable word/

সম্পাদনা: এর -nজন্য একটি শর্টহ্যান্ড --namedistinguishable wordআপনি পরীক্ষার বিবরণে যে কোনও স্ট্রিং রাখতে পারেন, আমি সাধারণত কিছু র্যান্ডম শব্দ ব্যবহার করি যা আমি জানি যে অন্যান্য পরীক্ষার বিবরণীতে উপস্থিত হবে না।


আপনি কি আরও ব্যাখ্যা করতে পারেন? সেই -nপ্যারামিটারটির অর্থ কী?
নিকো হাজেস

এটির জন্য একটি সাঁটে লেখার --name। শুধু একটি সুবিধাজনক জিনিস। বিশেষত / রেজেক্স / এর সাথে দরকারী, আমি সাধারণত কিছু র্যান্ডম শব্দটি পরীক্ষার নামে রাখি (যে আমি জানি যে অন্যান্য পরীক্ষার বর্ণনায় উপস্থিত হবে না)।
sloneorzeszki

1
অনুগ্রহ করে তার সম্পর্কে উত্তরের সাথে কিছু ব্যাখ্যা যুক্ত করুন, মন্তব্য বিভাগে নয়
নিকো হাজে

0

নিম্নলিখিত কাজ করবে

def test_abc
end

test "hello world"
end

এটি চালাতে পারে

bundle exec ruby -I test path/to/test -n test_abc

bundle exec ruby -I test path/to/test -n test_hello_word

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