2010-04-08 33 views
7

Ok, vì vậy tôi đã gặp phải một vấn đề rất lạ, được kết nối trực tiếp với trước khối. Tôi đang làm một thử nghiệm tích hợp thông qua Watir và RSpec. Đối với một thử nghiệm đơn giản để kiểm tra xem người dùng có thể thực hiện đăng nhập tôi đang tạo bản ghi 'người dùng' trong db bằng phương tiện factory_girl hay không.RSpec: sự khác biệt sâu sắc giữa trước (: tất cả) và trước (: mỗi)

Vì vậy, tôi đặt đoạn mã sau:

before(:each) do 
    @user = Factory(:user) 
end 

if "should perform a login" do 
    # do stuff 
end 

Trong do stuff tôi gọi một trình duyệt và xem cách người dùng cố gắng đăng nhập. Thật không may, bằng cách nào đó anh ta không thể làm điều đó - "Tên người dùng không hợp lệ".

Sau một số điều tra, tôi phát hiện ra rằng nếu tôi đặt mã để tạo người dùng trong khối before(:all), mọi thứ đều hoạt động một cách kỳ diệu. Làm thế nào? Sự khác nhau giữa :all:each trong ngữ cảnh này là gì? Ngoài ra, nếu tôi đặt mã để tạo người dùng thực sự trong cơ thể thử nghiệm, nó vẫn không hoạt động (tức là người dùng bằng cách nào đó không được thêm vào DB hoặc một cái gì đó).

Trả lời

3

Bạn có lẽ đã cố định giao dịch được kích hoạt, do đó quá trình watir bạn không thấy các thay đổi cơ sở dữ liệu bên trong các giao dịch mà mỗi ví dụ RSpec được gói trong.

Hãy thử tắt tính năng giao dịch và sử dụng giống như database cleaner để có được một slate sạch trước mỗi ví dụ.

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