2013-03-06 35 views
8

Tôi đang sử dụng Rails 4.0.0.beta1. Tôi đã thêm hai thư mục: app/servicestest/services.cào: thử nghiệm không chạy thử nghiệm tùy chỉnh trong thư mục con

Tôi cũng đã thêm mã này, dựa trên đọc testing.rake of railties:

namespace :test do 
    Rake::TestTask.new(services: "test:prepare") do |t| 
    t.libs << "test" 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 

Tôi đã phát hiện ra rằng rake test:services chạy các bài kiểm tra trong test/services; tuy nhiên, rake test không chạy các thử nghiệm đó. Có vẻ như nó nên; ở đây là code:

Rake::TestTask.new(:all) do |t| 
    t.libs << "test" 
    t.pattern = "test/**/*_test.rb" 
end 

Tôi có bỏ qua điều gì đó không?

Trả lời

11

Thêm một dòng như thế này sau khi định nghĩa nhiệm vụ thử nghiệm của bạn:

Rake::Task[:test].enhance { Rake::Task["test:services"].invoke } 

Tôi không biết tại sao họ không tự động nhận được chọn, nhưng đây là giải pháp duy nhất tôi đã tìm thấy rằng làm việc cho Thử nghiệm :: Đơn vị.

Tôi nghĩ rằng nếu bạn chạy rake test:all, nó sẽ chạy thử nghiệm bổ sung của bạn, nhưng chỉ rake test sẽ không có đoạn mã ở trên.

+0

Điểm tốt: 'test' và' test: all' nhiệm vụ khác nhau. –

+0

Re: "Tôi không biết tại sao họ không tự động nhận được" - Tôi không biết nếu điều này là cố ý, hoặc chỉ là một bất đối xứng phát triển như thay đổi đã được thực hiện. Vì vậy, tôi đã thêm một [bình luận về yêu cầu kéo thêm bài kiểm tra: tất cả các nhiệm vụ] (https://github.com/rails/rails/pull/9177#issuecomment-14575192). –

+0

Cảm ơn bạn rất nhiều, Jim. – Ashitaka

4

Đối với những người sử dụng gần đây một phiên bản Rails hơn (4.1.0 trong trường hợp của tôi)

Sử dụng Rails::TestTask thay vì Rake::TestTask và ghi đè run nhiệm vụ:

namespace :test do 
    task :run => ['test:units', 'test:functionals', 'test:generators', 'test:integration', 'test:services'] 
    Rails::TestTask.new(services: "test:prepare") do |t| 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 
3

trình giải pháp của Jim, tuy nhiên nó kết thúc lên chạy bộ kiểm thử bổ sung là một nhiệm vụ riêng biệt và không phải là một phần của toàn bộ (ít nhất là sử dụng Rails 4.1). Vì vậy, số liệu thống kê kiểm tra được chạy hai lần thay vì tổng hợp. Tôi không cảm thấy đây là hành vi mong muốn ở đây.

Đây là cách tôi đã kết thúc giải quyết này (sử dụng Rails 4.1.1)

# Add additional test suite definitions to the default test task here 

namespace :test do 
    Rails::TestTask.new(extras: "test:prepare") do |t| 
    t.pattern = 'test/extras/**/*_test.rb' 
    end 
end 

Rake::Task[:test].enhance ['test:extras'] 

Điều này dẫn đến hành vi chính xác mong đợi bằng cách đơn giản bao gồm các test:extras nhiệm vụ mới trong tập hợp các nhiệm vụ được thực hiện bởi rake test và tất nhiên mặc định rake. Bạn có thể sử dụng phương pháp này để thêm bất kỳ số lượng bộ thử nghiệm mới theo cách này.

Nếu bạn đang sử dụng Rails 3, tôi tin rằng chỉ cần thay đổi thành Rake::TestTask sẽ hoạt động cho bạn.

3

Hoặc đơn giản là chạy rake test:all

Nếu bạn muốn để chạy tất cả các bài kiểm tra theo mặc định, ghi đè nhiệm vụ kiểm tra:

namespace :test do 
    task run: ['test:all'] 
end 
Các vấn đề liên quan