2011-07-20 34 views
6

Tôi có một tình huống kỳ lạ, nếu tôi chạy một tệp mô hình rspec riêng, tất cả các ví dụ đều có màu xanh lá cây, nếu tôi kiểm tra toàn bộ thư mục spec/models của mình thì tất cả các ví dụ của tôi đều có màu xanh lục. Nếu tôi kiểm tra các bộ điều khiển, tất cả chúng đều chuyển sang màu xanh lục. Nếu tôi kiểm tra toàn bộ bộ (thông qua thông số rspec) thì tôi sẽ bị lỗi - Nếu tôi loại bỏ các kiểm tra bộ điều khiển thì toàn bộ mọi thứ đều có màu xanh lục. Bây giờ tôi hy vọng điều này là hoàn toàn tự gây ra nhưng tôi chỉ không thể tìm ra nó.Kiểm tra toàn bộ bộ Rspec không thành công

Tôi đã thu hẹp nó xuống các ví dụ cụ thể trong các kiểm tra bộ điều khiển - điều này làm cho các ví dụ trong thông số kỹ thuật của mô hình bị lỗi.

ví dụ: trong một notes_controller_spec.rb nếu dòng này hiện diện

Note.any_instance.stubs(:valid?).returns(false) 

nó gây ra một sự thất bại trong các mô hình của tôi/account_spec.rb

Failure/Error: @account.all_notes.should have(2).notes 
ArgumentError: 
comparison of Note with Note failed 
./app/models/account.rb:293:in `sort' 

nơi dòng 293 là;

(self.notes + self.transactions.map(&:notes).flatten).sort {|a,b| a.created_at <=> b.created_at } 

Tôi khá chắc chắn đây sẽ là một trong những khoảnh khắc lòng bàn tay dễ chịu với tôi!

+0

'created_at' thể được 'nil' cho một trong những Notes, có nghĩa là khối sắp xếp của bạn sẽ được so sánh' nil' chống lại một 'Fixnum', điều này sẽ khiến cho khối đó trả về 'nil', điều này sẽ làm cho sắp xếp nổ tung với loại' ArgumentError' mà bạn đang thấy.Bạn có chắc chắn tất cả các trường hợp của bạn đã được lưu trong cơ sở dữ liệu khi dòng này chạy? Có thể cơ sở dữ liệu của bạn không bị làm trống trước mỗi ví dụ? –

+0

Tôi đang gặp sự cố tương tự. Tôi có cảm giác nó có thể liên quan đến [vấn đề rspec này] (https://github.com/rspec/rspec-mocks/issues/54), mặc dù nó tuyên bố đã được sửa. –

+0

xin lỗi, tôi vô tình nhấn enter, chi tiết hơn: Tôi đang đưa phương thức vào bất kỳ trường hợp nào của một mô hình - một mô hình khác với mô hình tôi đang thử nghiệm trong tập hợp thử nghiệm cụ thể. Khi tôi chạy một bộ kiểm tra khác yêu cầu phương pháp đó, nó không được tìm thấy. Lấy ra các bài trong các bài kiểm tra trong một tập tin làm cho các tập tin khác vượt qua. Thực sự gây phiền nhiễu. Tôi đã thử nghiệm với việc cài đặt các phiên bản rspec khác nhau. –

Trả lời

1

Bạn có thực hiện bất kỳ thiết lập ngày nào trước đây: tất cả khối không? Đây không phải là giao dịch và có thể gây ra vấn đề ô nhiễm kiểm tra.

Ngoài ra, tôi nghĩ rằng cú pháp của bạn có thể tắt ở đây:

Note.any_instance.stubs(:valid?).returns(false) 

nên là:

Note.any_instance.stub(:valid?).and_return(false) 
0

Tôi đã có kinh nghiệm vấn đề tương tự với RSpec 3 và Rails 4.1. Bất cứ khi nào tôi chạy tập tin spec có vấn đề riêng của nó, nó sẽ vượt qua, trong khi chạy bộ đầy đủ sẽ làm cho nó thất bại.

Trong trường hợp của tôi, nó liên quan đến múi giờ. Tôi đã thiết lập rõ ràng múi giờ trong ApplicationController và vì lý do nào đó, các đặc tả tính năng của tôi không thích nó. Nếu tôi không đặt múi giờ khi ở trong môi trường thử nghiệm, mọi thứ sẽ lại xuất hiện. ví dụ.

unless Rails.env.test? 
    Time.zone = "some timezone value here" 
end 
0

Tôi gặp sự cố tương tự: Thông số kỹ thuật mô hình riêng lẻ được chuyển. Khi chạy toàn bộ bộ mô hình, tôi đã có khoảng 30 lỗi. Những gì tôi đã làm là nhìn vào tập tin trước khi tất cả những thất bại xảy ra. Ở đó tôi thấy rằng tôi đã thiết lập mọi thứ bên trong các chủ đề và sử dụng default_scopes như trong số railscast này.

Trong điều khoản trước, tôi đã in Company.current_id. Như tôi nghĩ, khi chạy riêng lẻ, Company.current_idnil. Khi chạy bộ, Company.current_id2. Đây là những gì sẽ xảy ra khi bạn sử dụng phạm vi mặc định. Để khắc phục, tôi chỉ cần đặt Company.current_id thành nil trong mệnh đề trước.

Trước

describe Service, type: :model do 
    before do 
    end 
end 

Sau

describe Service, type: :model do 
    before do 
    Company.current_id = nil 
    end 
end 
Các vấn đề liên quan