2012-01-09 27 views
16

Tôi đã thêm một số hộp thoại xác nhận cho ứng dụng Rails 3.1 của tôi và trước đó, các bài kiểm tra tương ứng của chúng. Theo mô hình của Railscast #257, tôi đã thêm ': js => true' vào thử nghiệm, thêm database_cleaner và sửa đổi tệp spec_helper.rb cho phù hợp.Lỗi đăng nhập khi kiểm tra với Capybara, Rspec và Selenium trong Rails 3.1

Khi tôi chạy thử nghiệm, Firefox khởi chạy, Capybara-Selenium điền vào các trường tên người dùng và mật khẩu thích hợp, nhưng đăng nhập không thành công (ví dụ: "tên người dùng/mật khẩu không hợp lệ".) Các thử nghiệm khác không có ': js => true' và cũng đăng nhập, vẫn chuyển.

Tôi muốn thêm javascript hơn để ứng dụng của tôi trong tương lai và tôi tránh các giải pháp đó sẽ Hack Capybara để có được điều này để làm việc (ví dụ, nhấp vào 'OK' trên tất cả các hộp thoại.)

Bất cứ ý tưởng gì Tôi có thể bị mất tích? Không, có bất kỳ đề xuất nào về cách gỡ lỗi vấn đề này không?

Cảm ơn bạn.

Trả lời

14

Bạn nên đặt use_transactional_fixtures = false cho seleniumtests của bạn. Điều này có thể được thực hiện trong spec_helper.rb với

config.use_transactional_fixtures = false 

cho tất cả các thử nghiệm của bạn.

Hoặc làm việc này cho một testcase duy nhất:

describe 'testcase' , :type => :request do 
    self.use_transactional_fixtures = false 
    it 'your test', :js => :true do 
    testing... 
    end 
end 

Điều này xảy ra bởi vì selen-kiểm tra truy cập vào cơ sở dữ liệu theo một cách khác. Với các đồ thị giao dịch được bật, selen sẽ hoạt động trên một cơ sở dữ liệu trống -> người dùng của bạn không tồn tại và bạn không thể đăng nhập.

Để kiểm tra bình thường, bạn nên sử dụng đồ đạc giao dịch vì thử nghiệm của bạn chạy nhanh hơn nhiều.

+0

Cảm ơn bạn đã trả lời. Tôi đã có đồ đạc giao dịch bị vô hiệu hoá trong spec_helper.rb của tôi và nó đã không hoạt động. Nhưng làm điều đó với trong thử nghiệm cụ thể đã làm việc! Nó đăng nhập vào tôi và thất bại khi kiểm tra khi nó nhấp vào nút. Nhưng hộp thoại xác nhận xuất hiện, bây giờ tôi chỉ cần tìm ra cách nhấp vào nó thông qua kiểm tra tích hợp. Cảm ơn một lần nữa! – JHo

+0

nếu đó là hộp thoại đường ray phổ biến bạn có thể thử: page.driver.browser.switch_to.alert.accept –

+0

Nếu tôi đang sử dụng mongoid thì sao? i cant set use_transactional_fixtures = false –

9

Theo Avdi Grimm's post (có giải thích chi tiết):

Gemfile:

group :test do 
    gem 'database_cleaner' 
end 

spec_helper.rb:

config.use_transactional_fixtures = false 

đặc tả/support/database_cleaner.rb :

RSpec.configure do |config| 

    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each, :js => true) do 
    DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

end 

tôi đã cố định giao dịch bị vô hiệu hóa nhưng thêm khối :js => true để database_cleaner.rb đã làm nó cho tôi.

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