Làm thế nào để chạy một bài kiểm tra duy nhất từ ​​bộ kiểm tra đường ray?


Câu trả lời:


158

LƯU Ý: Điều này không chạy thử nghiệm thông qua rake. Vì vậy, bất kỳ mã nào bạn có Rakefilesẽ KHÔNG được thực thi.

Để chạy thử nghiệm đơn, sử dụng lệnh sau từ thư mục chính của dự án rails của bạn:

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

Điều này chạy một thử nghiệm duy nhất có tên "tên", được định nghĩa trong lớp MyModelTest trong tệp được chỉ định. Test_name được hình thành bằng cách lấy tên kiểm tra, thêm vào đó bằng từ "kiểm tra", sau đó phân tách các từ bằng dấu gạch dưới. Ví dụ:

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

Bạn có thể chạy cả hai bài kiểm tra thông qua:

ruby -I test test/unit/my_model_test.rb

và chỉ thử nghiệm thứ hai thông qua

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

4
Điều này không làm việc cho tôi (trên các bài kiểm tra chức năng hoặc đơn vị). Tôi nhận được 0 tests, 0 assertions, 0 failures, 0 errors. Đường ray 3.0.7.
B Bảy

10
Cá nhân tôi là một fan hâm mộ của hình thức regex : -n "/good/". Shell thoát luôn thú vị, vì vậy tôi có xu hướng gắn bó với các biểu thức đơn giản, nhưng nó dễ dàng hơn nhiều so với việc viết ra tên thử nghiệm đầy đủ mọi lúc.
Groxx

4
Điều quan trọng cần lưu ý là để điều này hoạt động, bạn không nên ở trong thư mục MAIN như được chỉ định trong phản hồi mà trong thư mục con chứa test/thư mục. Ví dụ, nếu tôi muốn chạy thử nghiệm, activesupport/test/core_ext/array_ext_test.rbtôi nên ở trong activesupport/đầu tiên.
Vincent B.

3
@Groxx - Cuối cùng là một giải pháp! Cảm ơn bạn! -n "/good/"đã làm việc.
B Bảy

Hãy cẩn thận chạy này trong năm 2018+. Nó bỏ qua một số tác vụ thử nghiệm được tích hợp trong đường ray (như db: test: ready) được sử dụng cho nhiều thứ, như hoán đổi dữ liệu cục bộ cho dữ liệu của vật cố định và khôi phục lại nó. Chạy này thổi bay cơ sở dữ liệu địa phương của tôi. Hãy xem xét một giải pháp sử dụng các tác vụ kiểm tra đường ray tích hợp, như stackoverflow.com/a/47006811/1154642 (hoạt động với tôi).
bryanbraun

99

Chạy một tệp thử nghiệm :

rake test TEST=tests/functional/accounts_test.rb

Chạy một thử nghiệm trong một tệp thử nghiệm:

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

(Từ nhận xét của @Puhlze.)


10
Ngoài ra, nếu bạn muốn chạy thử nghiệm đơn lẻ trong tệp đã cho, bạn có thể thêm var môi trường TESTOPTS sẽ được chuyển qua thử nghiệm. Kiểm tra rake EG TEST = tests / function / Tài khoản_test.rb TESTOPTS = "- n / tài khoản phải trả tiền /"
Puhlze

1
nếu lệnh kiểm tra sau không hoạt động, hãy thử rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(kèm theo /paid accounts/dấu ngoặc đơn)
rrw


38

Đối với đường ray 5:

rails test test/models/my_model.rb

9
Nhưng điều này chạy tất cả các trường hợp thử nghiệm trong tệp, câu hỏi yêu cầu chạy một thử nghiệm duy nhất ...
user000001

Bạn có thể chạy thử nghiệm đơn lẻ bằng cách nối thêm số dòng vào tên tệp:bin/rails test test/models/user_test.rb:27
Segfault

29

Nhờ @James, câu trả lời dường như là:

rails test test/models/my_model.rb:22

Giả sử 22 là số dòng của bài kiểm tra đã cho. Theo đường ray giúp:

 $ rails test --help

Bạn có thể chạy thử nghiệm đơn bằng cách nối thêm số dòng vào tên tệp:

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

Ngoài ra, xin lưu ý rằng bài kiểm tra của bạn nên kế thừa từ ActionDispatch :: IntegrationTest để điều này hoạt động (Đó là lỗi của tôi):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
Đây dường như là câu trả lời tốt nhất dựa trên các hướng dẫn Rails, ít nhất là để thử nghiệm một dòng cụ thể.
tfantina

12

Trong đường ray 5,

Tôi đã sử dụng cách này để chạy tệp thử nghiệm duy nhất (tất cả các thử nghiệm trong một tệp)

rails test -n /TopicsControllerTest/ -v

xem tại đây https://stackoverflow.com/a/41183694/3626659


1
đây là câu trả lời tốt nhất cho câu hỏi dành cho các phiên bản đường ray gần đây, +1
user000001

5

Để chạy thử nghiệm duy nhất trong bộ Rails thực tế:

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

3

Đó là một câu hỏi nửa đêm ngớ ngẩn của tôi. Rails vui lòng in lệnh mà nó đang thực thi rake test. Phần còn lại là một bài tập cắt và dán.

~/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

Nếu bạn muốn chạy thử nghiệm đơn lẻ, bạn có thể chạy chúng dưới dạng tập lệnh Ruby thông thường

ruby actionmailer/test/mail_layout_test.rb

Bạn cũng có thể chạy toàn bộ bộ phần mềm (ví dụ: ActiveRecord hoặc ActionMailer) bằng cách cdvào thư mục và chạy rake testbên trong đó.


1
Không có trong Rails - ít nhất là không với các tệp thử nghiệm mặc định được tạo. Họ đã "yêu cầu 'test_helper'" trên dòng đầu tiên, nhưng đường dẫn tải sẽ không được thiết lập kịp thời. Nếu bạn thay đổi mọi dòng đầu tiên thành một yêu cầu rõ ràng ("yêu cầu File.join (File.dirname ( FILE ), '..', 'test_helper')"), thì giải pháp của bạn sẽ hoạt động.
James A. Rosen

ồ, đó làrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius Đã kiểm tra lại. Đầu tiên không hoạt động, nhưng cd-ing in. Nói rõ hơn (Tôi không chắc là tôi có đọc sai điều này không, nhưng bạn đã nói "các tệp kiểm tra được tạo"), đây là cho chính thư viện Rails, không phải là một dự án Rails.
Aupajo

2

Trong tình huống của tôi rakechỉ hoạt động TESTOPTS="-n='/sample/'":

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

0

Đầu tiên, truy cập vào thư mục của lib bạn muốn kiểm tra (điều này rất quan trọng) và sau đó chạy:

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

0

Thư mục Rails

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

Lưu ý bạn cần tải thư mục thích hợp: "activerecord / test" (nơi bạn đã kiểm tra)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.