จะเรียกใช้การทดสอบเดี่ยวจากชุดทดสอบรางได้อย่างไร


132

ฉันจะเรียกใช้การทดสอบเดี่ยวจากชุดทดสอบรางได้อย่างไร

rake test ANYTHING ดูเหมือนจะไม่ช่วย


คำตอบ:


158

หมายเหตุ: สิ่งนี้ไม่ได้เรียกใช้การทดสอบผ่านrakeไฟล์. ดังนั้นรหัสใด ๆ ที่คุณมีRakefileจะไม่ถูกเรียกใช้งาน

ในการเรียกใช้การทดสอบเพียงครั้งเดียวให้ใช้คำสั่งต่อไปนี้จากไดเร็กทอรีหลักของโปรเจ็กต์รางของคุณ:

ruby -I test test/unit/my_model_test.rb -n test_name

สิ่งนี้รันการทดสอบเดี่ยวชื่อ "name" ซึ่งกำหนดไว้ในคลาส MyModelTest ในไฟล์ที่ระบุ test_name เกิดจากการใช้ชื่อการทดสอบโดยนำหน้าด้วยคำว่า "test" จากนั้นคั่นคำด้วยเครื่องหมายขีดล่าง ตัวอย่างเช่น:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

คุณสามารถเรียกใช้การทดสอบทั้งสองแบบผ่าน:

ruby -I test test/unit/my_model_test.rb

และการทดสอบครั้งที่สองผ่าน

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
สิ่งนี้ไม่ได้ผลสำหรับฉัน (ในการทดสอบฟังก์ชันหรือหน่วย) ฉันเข้าใจ0 tests, 0 assertions, 0 failures, 0 errorsแล้ว ราง 3.0.7
B เซเว่น

10
ผมเองเป็นแฟนของรูปแบบ regex -n "/good/"นี้: การหนีด้วยเชลล์เป็นเรื่องสนุกเสมอดังนั้นฉันมักจะยึดติดกับ regexes ธรรมดา ๆ แต่มันง่ายกว่าการเขียนชื่อเต็มตลอดเวลา
Groxx

4
สิ่งสำคัญคือต้องทราบว่าเพื่อให้ได้ผลคุณไม่ควรอยู่ในไดเร็กทอรี MAIN ตามที่ระบุไว้ในการตอบกลับ แต่อยู่ในไดเร็กทอรีย่อยที่มีtest/โฟลเดอร์ ตัวอย่างเช่นถ้าฉันต้องการเรียกใช้การทดสอบactivesupport/test/core_ext/array_ext_test.rbฉันควรจะเข้ามาactivesupport/ก่อน
Vincent B.

3
@Groxx - ทางออกในที่สุด! ขอบคุณ! -n "/good/"ทำงาน
B Seven

โปรดใช้ความระมัดระวังในปี 2018+ โดยจะข้ามงานทดสอบบางอย่างที่สร้างไว้ในราง (เช่น db: test: จัดเตรียม) ซึ่งใช้กับหลาย ๆ สิ่งเช่นการแลกเปลี่ยนข้อมูลในเครื่องสำหรับข้อมูลการติดตั้งและเรียกคืนอีกครั้ง การเรียกใช้สิ่งนี้ทำให้ฐานข้อมูลในเครื่องของฉันหายไป พิจารณาโซลูชันที่ใช้งานทดสอบรางในตัวเช่นstackoverflow.com/a/47006811/1154642 (ซึ่งใช้ได้ผลสำหรับฉัน)
bryanbraun

100

เรียกใช้ไฟล์ทดสอบ :

rake test TEST=tests/functional/accounts_test.rb

เรียกใช้การทดสอบเดียวในไฟล์ทดสอบ:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(จากความคิดเห็นของ @Puhlze)


10
นอกจากนี้หากคุณต้องการเรียกใช้การทดสอบเดี่ยวในไฟล์ที่กำหนดคุณสามารถเพิ่มสภาพแวดล้อมการทดสอบซึ่งจะถูกส่งไปยังการทดสอบ EG rake test TEST = การทดสอบ / functional / accounts_test.rb TESTOPTS = "- n / บัญชีชำระเงิน /"
Puhlze

1
ถ้าคำสั่งทดสอบหลังใช้ไม่ได้ให้ลองrake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(ใส่/paid accounts/เครื่องหมายคำพูดเดี่ยว)
rrw


40

สำหรับราง 5:

rails test test/models/my_model.rb

9
แต่การดำเนินการนี้จะเรียกใช้กรณีทดสอบทั้งหมดในไฟล์คำถามจะขอให้เรียกใช้การทดสอบเดียว ...
user000001

คุณสามารถเรียกใช้การทดสอบเดียวโดยการต่อท้ายหมายเลขบรรทัดเข้ากับชื่อไฟล์:bin/rails test test/models/user_test.rb:27
Segfault

31

ขอบคุณ @James คำตอบน่าจะเป็น:

rails test test/models/my_model.rb:22

สมมติว่า 22 คือหมายเลขบรรทัดของการทดสอบที่กำหนด ตามความช่วยเหลือทางรถไฟ:

 $ rails test --help

คุณสามารถเรียกใช้การทดสอบเพียงครั้งเดียวโดยการต่อท้ายหมายเลขบรรทัดเข้ากับชื่อไฟล์:

    bin/rails test test/models/user_test.rb:27

นอกจากนี้โปรดทราบว่าการทดสอบของคุณควรสืบทอดจาก ActionDispatch :: IntegrationTest เพื่อให้สิ่งนี้ทำงานได้ (นั่นคือความผิดพลาดของฉัน):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
ดูเหมือนว่าจะเป็นคำตอบที่ดีที่สุดตามคู่มือ Rails อย่างน้อยก็สำหรับการทดสอบบรรทัดเฉพาะ
tfantina

12

ในราง 5,

ฉันใช้วิธีนี้เพื่อเรียกใช้ไฟล์ทดสอบเดี่ยว (การทดสอบทั้งหมดในไฟล์เดียว)

rails test -n /TopicsControllerTest/ -v

ดูที่นี่ https://stackoverflow.com/a/41183694/3626659


1
นี่คือคำตอบที่ดีที่สุดสำหรับคำถามสำหรับรางรุ่นล่าสุด +1
user000001

5

ในการเรียกใช้การทดสอบเดี่ยวในชุด Rails จริง:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb


3

นั่นเป็นคำถามตอนเที่ยงคืนโง่ ๆ ของฉัน rake testรางพิมพ์กรุณาคำสั่งก็จะถูกดำเนินการเมื่อ ส่วนที่เหลือเป็นแบบฝึกหัดตัดแปะ

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"

2

หากคุณต้องการเรียกใช้การทดสอบเดียวคุณสามารถเรียกใช้เป็นสคริปต์ Ruby ปกติ

ruby actionmailer/test/mail_layout_test.rb

คุณยังสามารถรันทั้งชุด (เช่น ActiveRecord หรือ ActionMailer) โดยcd-ing เข้าไปในไดเร็กทอรีและเรียกใช้rake testภายในที่นั่น


1
ไม่อยู่ใน Rails - อย่างน้อยก็ไม่ใช่ไฟล์ทดสอบเริ่มต้นที่สร้างขึ้น มีคำว่า "ต้องการ" test_helper "ในบรรทัดแรก แต่จะไม่มีการตั้งค่าเส้นทางการโหลดให้ทันเวลา หากคุณเปลี่ยนทุกบรรทัดแรกเป็น Explicit require ("ต้องใช้ File.join (File.dirname ( FILE ), '.. ', 'test_helper')") แสดงว่าโซลูชันของคุณใช้งานได้
James A. Rosen

อะแฮ่มนั่นคือrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius ตรวจสอบซ้ำ อันแรกใช้ไม่ได้ แต่cd-ing เข้า เพื่อความชัดเจน (ฉันไม่แน่ใจว่าฉันอ่านผิดหรือเปล่า แต่คุณพูดว่า "สร้างไฟล์ทดสอบ") นี่เป็นของไลบรารี Rails เองไม่ใช่โครงการ Rails
Aupajo

2

ในสถานการณ์ของฉันสำหรับการrakeทำงานเท่านั้นTESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

ขั้นแรกให้เข้าถึงโฟลเดอร์ของ lib ที่คุณต้องการทดสอบ (สิ่งนี้สำคัญ) จากนั้นเรียกใช้:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

โฟลเดอร์ Rails

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

โปรดทราบว่าคุณต้องโหลดโฟลเดอร์ที่เหมาะสม: "activerecord / test" (ที่คุณมีการทดสอบ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.