2012-04-07 37 views
17

Tôi đang cố gắng tìm hiểu rspec. Tôi dường như không thể kiểm tra một phương pháp điều khiển đường ray. Khi tôi gọi phương thức trong thử nghiệm, rspec chỉ trả về một lỗi phương thức không xác định. Đây là thử nghiệm của tôi ví dụlàm cách nào để kiểm tra phương pháp điều khiển bằng rspec?

it 'should return 99 if large' do 
    GamesController.testme(1000).should == 99 
end 

và đây là lỗi:

Failure/Error: GamesController.testme(1000).should == 99 
NoMethodError: 
    undefined method `testme' for GamesController:Class 

tôi có một phương pháp testme trong GamesController. Tôi không hiểu tại sao mã thử nghiệm không thể thấy các phương pháp của tôi.

Mọi trợ giúp đều được đánh giá cao.

+0

Đây có phải là tư nhân không e phương pháp? – plainjimbo

Trả lời

4

Bạn cố gắng thử nghiệm phương pháp lớp, nhưng điều khiển có phương pháp dụ

Bạn cần GamesController.new.testme(1000).should == 99

Hoặc thậm chí GamesController.new.send(:testme, 1000).should == 99, bởi vì, như tôi nghĩ, đây không phải là phương pháp hành động, nhưng tin hay bảo vệ.

phương pháp hành động được kiểm tra this way

+0

OK. Bây giờ tôi thấy điều đó. Sự khác biệt giữa các lớp và các phương thức thể hiện là một sự tinh tế đã thoát khỏi tôi. Như bạn có thể nói, tôi vẫn còn mới với ruby ​​và đường ray. Bằng cách này, liên kết đến tài liệu hướng dẫn rspec-ray là tốt. Tôi không biết về tài nguyên đó. Cảm ơn bạn. –

25

Tôi nghĩ rằng cách chính xác là thế này:

describe GamesController do 
    it 'should return 99 if large' do 
    controller.testme(1000).should == 99 
    end 
end 

Trong một spec điều khiển đường ray, khi bạn đặt các lớp điều khiển trong describe, bạn có thể sử dụng controller phương pháp để có được một ví dụ: P
Rõ ràng, nếu phương thức testme là riêng tư, bạn vẫn phải sử dụng controller.send :testme

+0

Thankyou rất nhiều - điều này thật khó tìm thấy trong tài liệu – Andy

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