2009-06-12 17 views
10

Tôi đang thêm thử nghiệm rspec vào ứng dụng của mình và muốn thử nghiệm mô-đun ScoringMethods, nằm trong /lib/scoring_methods.rb. Vì vậy, tôi đã thêm một thư mục/spec/lib và thêm score_methods_spec.rb vào đó. Tôi cần spec_helper và thiết lập các khối mô tả như vậy:Việc thêm kiểm tra rspec cho mô-đun thư viện dường như không lấy được Kỳ vọng và Đối sánh

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') 

describe ScoringMethods do 

    describe "should have scorePublicContest method" do 
    methods = ScoringMethods.instance_methods 
    methods[0].should match(/scorePublicContest/) 
    end 
end 

Bây giờ methods[0] là một String và không có vấn đề phù hợp với tên phương pháp công cộng với biểu thức chính quy. Và đường dẫn tương đối đến "spec_helper" là chính xác.

Vấn đề là toàn bộ thiết lập dường như không sử dụng thư viện rspec. Chạy sản lượng ví dụ:

./spec/lib/scoring_methods_spec.rb:7: undefined method `match' for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError) 
    ... 

Toàn bộ hỗ trợ Mong đợi và đối sánh dường như bị thiếu. Để kiểm tra giả định của tôi, tôi đã thay đổi thông số trợ giúp làm việc bằng cách thay thế "is_instance_of" thành "is_foobar_of". Kiểm tra đó đơn giản là không thành công và nói "is_foobar_of" không phải là một phương thức của đối tượng được nhắm mục tiêu; rằng nó, toàn bộ Spec :: Rails :: Ví dụ ... hệ thống phân cấp không có mặt.

Tôi cũng đã thử sử dụng các trình so khớp khác. Tôi đã thử "be_instance_of" và một số người khác. Có vẻ như tôi không bao gồm thư viện rspec đúng cách.

Cuối cùng, ScoringMethods là một mô-đun, giống như cách Trợ giúp là các mô-đun. Vì vậy, tôi nghĩ rằng nó sẽ có thể kiểm tra một mô-đun (như trái ngược với các lớp học, chẳng hạn như bộ điều khiển và mô hình).

Tôi đánh giá cao những suy nghĩ của bạn về những gì tôi đã làm sai. Có lẽ có một cách hiệu quả hơn để kiểm tra các mô-đun thư viện? Cảm ơn!

Trả lời

11

Bạn nên bao gồm khối thử nghiệm của mình trong khối "nó". Ví dụ:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') 

describe ScoringMethods do 

    describe "should have scorePublicContest method" do 
    it "should have a scorePublicContest method" do 
     methods = ScoringMethods.instance_methods 
     methods[0].should match(/scorePublicContest/) 
    end 
    end 
end 

Bạn sẽ thấy rằng các tên phương thức trả về không được đảm bảo theo thứ tự tồn tại trong tệp.

Mô hình chúng tôi thường sử dụng khi thử nghiệm Mô-đun là bao gồm mô-đun trong lớp được tạo cho thử nghiệm (bên trong tệp spec) hoặc được bao gồm bên trong chính spec đó.

+1

Đánh dấu, Cảm ơn bạn rất nhiều vì đã trả lời. Bạn hoàn toàn đúng! Tôi không có khối "nó". Rất cám ơn, Peter –

+2

Ngoài ra, cảm ơn những suy nghĩ của bạn về việc thử nghiệm Mô-đun. Mô-đun được bao gồm trong một lớp để chỉ hiển thị các phương thức công khai của nó và không nhận được một danh sách lớn các phương thức được trả lại khi sử dụng cuộc gọi instance_methods. Bằng cách này, chúng ta có thể thêm các phương thức công khai mới vào mô đun và chúng có sẵn để lựa chọn trong danh sách thả xuống và tương tự. Sử dụng cùng một cơ chế, như bạn đề xuất, sẽ hữu ích khi thử nghiệm. –

+0

Tuyệt vời, cũng đã không đóng đúng cách khối 'it'. –

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