簡體   English   中英

Capybara:js => true導致測試失敗

[英]Capybara with :js => true causes test to fail

我是Capybara的新手並且一般都在Rails上進行測試,如果這是一個簡單的答案,請原諒我。

我有這個測試

it "should be able to edit an assignment" do
    visit dashboard_path
    select(@project.client + " - " + @project.name, :from => "assignment_project_id")
    select(@team_member.first_name + " " + @team_member.last_name, :from => "assignment_person_id")
    click_button "Create assignment"
    page.should have_content(@team_member.first_name)
end

它按原樣傳遞,但如果我添加:js => true則失敗

cannot select option, no option with text 'Test client - Test project' in select box 'assignment_project_id'

我正在使用FactoryGirl來創建數據,並且由於測試在沒有JS的情況下通過,我知道該部分正在運行。

我嘗試使用默認的JS驅動程序,並使用:webkit驅動程序(安裝了capybara-webkit)

我想我不太了解為Capybara開啟JS的目的是什么。

為什么測試會因JS而失敗?

我在https://github.com/jnicklas/capybara上閱讀了Capybara自述文件,它解決了我的問題。

事務夾具僅適用於默認的Rack :: Test驅動程序,但不適用於Selenium等其他驅動程序。 Cucumber會自動處理這個問題,但是使用Test :: Unit或RSpec,您可能必須使用database_cleaner gem。 有關詳細信息,請參閱此說明 (以及解決方案2解決方案3的代碼)。

但基本上它是一個線程問題,涉及Capybara在運行非Rack驅動程序時擁有自己的線程,這使得事務夾具功能在另一個上下文中使用第二個連接。 因此驅動程序線程永遠不會在運行rspec的相同上下文中。

幸運的是,這可以很容易地解決(至少它為我解決)在DatabaseCleaner策略中進行動態切換使用:

RSpec.configure do |config|
  config.use_transactional_fixtures = false

  config.before :each do
    if Capybara.current_driver == :rack_test
      DatabaseCleaner.strategy = :transaction
    else
      DatabaseCleaner.strategy = :truncation
    end
    DatabaseCleaner.start
  end

  config.after do
    DatabaseCleaner.clean
  end
end

修改我們的功能規格(全部使用Capybara)的brutuscat答案的變體:

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

config.before(:each) do
  # set the default
  DatabaseCleaner.strategy = :transaction
end

config.before(:each, type: :feature) do
  DatabaseCleaner.strategy = :truncation
end

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

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

還有另一種方法來處理這里現在描述和討論的這個問題: 為什么不為Rspec + Selenium使用共享的ActiveRecord連接?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM