2011-12-04 20 views
9

Tôi có một số thông số kỹ thuật, được viết bằng RSpec, kiểm tra các mô hình khác nhau. Tôi sử dụng Factory Girl để tạo đối tượng để thử nghiệm.rspec kiểm tra đi cô lập, nhưng không thành công khi chạy với các xét nghiệm khác

Bây giờ điều đặc biệt nhất xảy ra:
Khi tôi chạy rspec spec/models/specific_model_spec.rb --- này vượt qua tất cả các bài kiểm tra trong spec mà

Tuy nhiên, khi tôi chạy rspec spec/models --- mỗi thử nghiệm trong spec này không đề cập đến một liên kết không hợp lệ được tạo (thông qua một nhà máy)

Hiệp hội được tạo bởi nhà máy rõ ràng là hợp lệ khi chạy thử nghiệm trong sự cô lập cũng hiển thị.

Điều gì có thể gây ra hành vi này?

Cập nhật:
Các lỗi tôi nhận được khi chạy spec cùng với thông số kỹ thuật khác (lỗi này là như nhau cho mỗi thất bại):

6) StreamItem adds a stream_item to a project and consultant when an engagement is added 
Failure/Error: @project = Factory.create(:project, :name => 'bar') 
Validation failed: Customer is invalid 
# ./spec/models/stream_item_spec.rb:44:in `block (2 levels) in <top (required)>' 

Các project factory được thử nghiệm trong spec khác và vượt qua tốt ...

cập nhật 2: mã nhà máy có liên quan sử dụng được một sau:

Factory.define :manager, :class => User do |f| 
    f.sequence(:email) { |n| "bar#{n}@example.com" } 
    f.password "pass12" 
    f.sequence(:name) { |n| "Erwin#{n}" } 
    f.roles_mask 4 
end 

Factory.define :customer do |f| 
    f.sequence(:name) { |n| "foo customer#{n}" } 
    f.association :last_actor, :factory => :manager 
    f.account_id 1 
end 

Factory.define :project do |f| 
    f.sequence(:name) { |n| "foo project#{n}" } 
    f.association :manager, :factory => :manager 
    f.association :customer, :factory => :customer 
    f.start_date Date.today << 1 
    f.finish_date Date.today >> 2 
    f.status 1 
    f.association :last_actor, :factory => :manager 
    f.account_id 1 
end 
+0

Hãy xem lỗi. –

+0

Đã thêm lỗi. – ErwinM

+0

Cảm ơn. Và mã nhà máy của bạn? –

Trả lời

11

Điều này thường chỉ ra rằng các thông số kỹ thuật khác của bạn để lại một số dữ liệu trong DB xung đột với các cuộc gọi của nhà máy sau này. Tôi nghi ngờ nếu bạn nhìn vào lý do tại sao các nhà máy tạo phương pháp thất bại, bạn sẽ thấy một xác nhận cho sự độc đáo thất bại, có thể trên email của khách hàng.

Tắt đồ đạc giao dịch:

# spec_helper.rb 
config.use_transactional_fixtures = false 

và sử dụng database cleaner để thay thế. This blog post cũng có thể trợ giúp.

+0

Sự cố kết thúc là một số dữ liệu còn lại. Không có trong cơ sở dữ liệu nhưng trong một biến toàn cầu của một plugin. – ErwinM

+3

bạn tìm thấy biến toàn cầu này như thế nào? –

+0

@Thilo Bài đăng trên blog bạn liên kết đã biến mất. – jottr

5

RSpec hiện có "bisect" feature được thiết kế đặc biệt để tìm loại sự cố này.

Chạy lệnh RSpec gây ra lỗi với cờ --bisect và RSpec sẽ tự động xác định kết hợp các thông số nào gây ra lỗi đó.

rspec spec/models --bisect 
+0

Bạn là người tiết kiệm cuộc sống :) – Uzair

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