Tôi đã làm theo các hướng dẫn 15 TDD steps to create a Rails application - nhưng đã chạy vào một vấn đề tôi dường như không thể giải quyết. Đối với các thử nghiệm chức năng của WordsController, tôi có đoạn mã sau:Mocha Mock Carries Để thử nghiệm khác
class WordsControllerTest < ActionController::TestCase
test "should get learn" do
get 'learn'
assert_response :success
end
test "learn passes a random word" do
some_word = Word.new
Word.expects(:random).returns(some_word)
get 'learn'
assert_equal some_word, assigns('word')
end
end
Trong lớp Lời Tôi có đoạn mã sau:
class Word < ActiveRecord::Base
def self.random
all = Word.find :all
all[rand(all.size)]
end
end
Khi tôi chạy thử nghiệm, tôi kinh nghiệm các lỗi sau (rút ngắn cho ngắn gọn):
1) Failure: unexpected invocation: Word(...).random() satisfied expectations:
- expected exactly once, already invoked once: Word(...).random()
Tôi đã thử thay đổi thứ tự các bài kiểm tra cùng với vô số thứ khác, nhưng thời gian và lần nữa tôi tiếp tục nhận được cùng một câu hỏi t thất bại - rằng Word.random() đã được gọi.
Tôi đang chạy Rails 3.0 beta 4 và Mocha 0.9.8. Tôi đã tìm kiếm lâu dài và khó khăn cho một giải pháp cho vấn đề của tôi, nhưng tôi dường như không thể tìm thấy nó. Tôi là người mới đối với Ruby/Rails nên khá lạ lẫm với ngôn ngữ và khung công tác.
Cảm ơn trước!
Dịch vụ teardown có được gọi giữa các lần kiểm tra không? – pushmatrix
Nếu 'Mocha' đã được tải chính xác, nó sẽ có khuôn khổ thử nghiệm được vá bằng khỉ để gọi 'Mocha :: API # mocha_verify' &' Mocha :: API # mocha_teardown' tức là bạn không cần phải gọi chúng một cách rõ ràng. Lý do tôi hỏi làm thế nào 'Mocha' đã được yêu cầu, là để làm việc ra cho dù mọi thứ đang được nạp theo thứ tự đúng, để các bản vá lỗi khỉ hoạt động chính xác. –
Nếu bạn đặt 'MOCHA_OPTIONS = debug' làm biến môi trường khi chạy thử nghiệm, bạn sẽ thấy khung kiểm thử nào đang được vá thành công. Nếu bạn vẫn gặp sự cố với điều này, hãy cho tôi biết đầu ra gỡ lỗi là gì và cho tôi biết phiên bản nào của Mocha bạn đang sử dụng. Cảm ơn. –