Tôi đang phát triển một ứng dụng ROR dựa trên nhiều tác vụ Rake tùy chỉnh.Kiểm tra Nhiệm vụ Rake
Cách tốt nhất để kiểm tra chúng là gì?
Tôi đang phát triển một ứng dụng ROR dựa trên nhiều tác vụ Rake tùy chỉnh.Kiểm tra Nhiệm vụ Rake
Cách tốt nhất để kiểm tra chúng là gì?
Nhiệm vụ của Rake khá khó kiểm tra. Giải pháp đơn giản nhất là chuyển logic thành một phương thức trong một mô hình thích hợp. Sau đó bạn có thể kiểm tra và chỉ cần gọi phương thức từ nhiệm vụ rake.
này được khá tốt bao gồm trong another SO question
Tôi đề nghị, lặp đi lặp lại ở đây trong Tóm lại, không phải là để thử nhiệm vụ thử nghiệm cào: trích xuất mã được thử nghiệm để một lớp học, mô hình hay chức năng lib và thử nghiệm nó ở đó. Sau đó, chỉ cần sử dụng cào để gọi các chức năng và quản lý các phụ thuộc.
Cái gì như:
def execute_rake(file,task)
require 'rake'
rake = Rake::Application.new
Rake.application = rake
Rake::Task.define_task(:environment)
load "#{Rails.root}/lib/tasks/#{file}"
rake[task].invoke
end
Tại spec của bạn:
execute_rake("tags.rake","tags:popular")
cào [nhiệm vụ] .invoke thay vì cào [thẻ] .invoke – standup75
câu trả lời tuyệt vời. Đó là điều tải đã làm các trick khi thử nghiệm rake nhiệm vụ cho một viên ngọc. –
Đây là một ý tưởng tồi. Công việc này, cho đến khi bạn cần sử dụng cào để chạy thử nghiệm của bạn. Trong trường hợp đó, các thử nghiệm của bạn sẽ không hoạt động âm thầm với mã thoát khác 0, nhưng rspec sẽ báo cáo tất cả các kiểm tra vượt qua. –
Tôi thích PivotalLabs' way nhất. Tuy nhiên, tôi khái quát hóa và sửa đổi mã của họ như sau trong ứng dụng của tôi:
# file: spec/tasks/my_rake_file_spec.rb
require 'spec_helper'
require 'rake'
describe 'my_rake_file.rake' do
before :all do
Rake.application.rake_require 'tasks/my_rake_file'
Rake::Task.define_task(:environment)
end
let(:run_rake_task) {
Rake::Task[task_name].reenable
Rake.application.invoke_task task_name
}
describe 'my_task_name' do
let(:task_name) { "my_task_name" }
it "creates 10 cars" do
run_rake_task
Car.count.should == 10
end
end
end
Ngoài ra, tôi trích việc nặng nhọc mã my_rake_file.rake của một mô-đun, được lưu trữ trong thư mục lib/
Vâng, bây giờ có một Gem cho rằng:
Fantaskspec - https://github.com/crismali/fantaskspec
tôi nghĩ rằng đây là một gợi ý khá, nhưng nó không trả lời câu hỏi. Bạn không cần phải gây ô nhiễm cho các mô hình của mình để chạy tập lệnh batch, v.v. trên dữ liệu của bạn. –
Tôi có một câu trả lời hay hơn ở đây: http://stackoverflow.com/a/926100/94120 –