2009-05-29 28 views
10

tôi có một loạt các nhiệm vụ cào trong một Rakefile mà tôi muốn thử nghiệm như là một phần của thông số kỹ thuật của tôi vv Mỗi nhiệm vụ được xác định theo hình thức:Tôi có thể ghi đè tác vụ: môi trường trong test_helper.rb để kiểm tra tác vụ cào không?

task :do_somthing => :environment do 
    # Do something with the database here 
end 

Trường hợp: Nhiệm vụ môi trường thiết lập một ActiveRecord/Kết nối cơ sở dữ liệu DataMapper và các lớp. Tôi không sử dụng điều này như là một phần của Rails nhưng tôi có một loạt các bài kiểm tra mà tôi muốn chạy như một phần của BDD.

Đoạn mã này minh họa cách tôi đang cố gắng kiểm tra tác vụ cào.

def setup 
    @rake = Rake::Application.new 
    Rake.application = @rake 
    load File.dirname(__FILE__) + '/../../tasks/do_something.rake' 
end 

should "import data" do 
    @rake["do_something"].invoke 
    assert something_in_the_database 
end 

Vì vậy, yêu cầu của tôi để được giúp đỡ - là nó có thể quá mức đi xe: nhiệm vụ môi trường trong tập tin test_helper.rb của tôi vì vậy tôi thử nghiệm cào của tôi tương tác với cơ sở dữ liệu thử nghiệm của tôi, chứ không phải là sản xuất? Tôi đã thử xác định lại tác vụ trong tệp trợ giúp, nhưng điều này không hoạt động.

Bất kỳ trợ giúp nào cho giải pháp sẽ tuyệt vời, vì tôi đã bị mắc kẹt về vấn đề này trong tuần qua.

Trả lời

8

"Giải pháp" của tôi cho một vấn đề tương tự là trích xuất tất cả các logic từ tệp .rake của tôi và tạo các lớp để thực hiện các tác vụ, chỉ để lại một cuộc gọi một dòng trong tệp rake, mà tôi cảm thấy tự tin không thử nghiệm quá khó. Các lớp học sau đó có thể được kiểm tra khá bình thường.

Tôi không biết điều này sẽ đứng vững như thế nào đối với một số công việc phụ thuộc lẫn nhau, duy trì một số trạng thái xa vời: có lẽ không tốt, nhưng một lần nữa điều đó rất có thể là dấu hiệu của một số vấn đề thiết kế khác. ..

Tôi tò mò muốn biết liệu tôi có bỏ lỡ điều gì đó tốt hơn không.

EDIT: Đã từng có một bài đăng trên blog here rằng (a) nói điều tương tự và (b) nói tốt hơn. Có vẻ như anh ấy cũng nói điều đó trước.

+0

Cảm ơn câu trả lời của Mike. Tôi đã làm một số rối tung hơn xung quanh với Rake trong thời gian có nghĩa là, và tôi nghĩ rằng hai phương pháp trong test_helper.rb có thể là một số cách để hướng tới một giải pháp. def rake_up Rake.application = Rake :: Application.new Rake :: Task.define_task: môi trường Rake.application cuối def rake_down Rake.application = nil cuối –

+0

Các liên kết với bài đăng blog xuất hiện chết. Nơi duy nhất tôi có thể tìm thấy nội dung là ở đây: [Những gì để đưa vào các nhiệm vụ Rake] (http://www.artima.com/forums//threaded.jsp?forum=123&thread=251328) – ThomasW

0

khi bạn đang chạy môi trường thử nghiệm đang được tải là thử nghiệm.

để bạn chỉ tương tác với cơ sở dữ liệu thử nghiệm .

Vì vậy, tôi không thấy lý do nào để ghi đè nhiệm vụ cào của bạn trong test_helper.rb

1

Tôi nghĩ rằng bạn đang tìm kiếm dòng này: yêu cầu (File.join (RAILS_ROOT, 'config', 'môi trường')) đó là chính xác những gì bạn tìm thấy trong "nhiệm vụ: môi trường" thực hiện

tôi sử dụng nó để kiểm tra công việc cào của tôi sử dụng rspec

Các vấn đề liên quan