【发布时间】:2017-01-16 19:25:06
【问题描述】:
我正在升级我的 Rails 应用程序以使用 Turbolinks 5 来利用 Native Wrappers。我已经更新了所有的 javascript,并且在浏览器和 Android 应用程序中一切都按预期工作。使用 js true 时,我的一些水豚测试遇到了麻烦。在撰写本文时,我正在使用最新的 capybara (2.11.0)、poltergeist (1.12.0) 和 phantomjs (2.1)。我也尝试过 capybara-webkit 驱动程序,但没有成功。
我似乎遇到的问题是,在 turbolinks 5 中,所有表单都应远程提交,并且 turbolinks 知道如何处理请求。我发现使用 Capbara 我的表单在提交后不会重定向,它保持在同一页面上。我做了很多谷歌搜索和反复试验,但有一些不足。任何帮助将不胜感激。如果需要更多信息,请告诉我。
scenario 'user has dispatch permission and valid attributes', js: true do
sign_in('jdoe')
page.visit path
page.fill_in 'contact_text_input', with: 'Jimmy'
page.select 'Medium - 3 Hours', from: 'Priority'
page.fill_in 'Created By', with: 'John Doe'
page.click_button 'Create This'
save_and_open_page
expect(page.current_path).to eq("/dispatch")
expect(page).to have_content('This was created successfully')
end
def sign_in(username)
page.visit '/'
page.fill_in 'Username', with: username
page.fill_in 'Password', with: 'test'
page.click_button 'Log In'
end
【问题讨论】:
-
您是否使用
js_errors: true运行 Poltergeist 以确保您没有任何 JS 错误,或使用不受支持的 JS 函数/特性(Poltergeist 2.1.1 不支持 ES2015 - 新的 2.5 beta不过应该)。另请注意,在您的 JS 中使用let将在 Poltergeist 2.1.1 中静默失败 -
另外 - 由于
sign_in没有等待登录完成,我预计您的测试会失败。这意味着您的测试中的page.visit path可能会在设置身份验证cookie 之前被调用,因此不会加载您认为的页面。您应该有一些东西来确保登录已经完成,例如expect(page).to have_text('You have logged in!')或页面上显示的任何内容以表明成功登录。 -
谢谢你的所有指点,登录问题是我遇到的问题,所以我一定会尝试的。我正在尝试安装 phantomjs 的测试版,但登录问题可能是我遇到的问题
-
抱歉——我的意思是 PhantomJS 2.1.1——不是 poltergeist——和 PhantomJS 2.5 beta。不过,它现在非常处于测试阶段,并且有一些自己的问题
-
我回到 2.1.1 并且我的 sign_in 函数的建议解决了我的大部分测试失败。我还剩下一些,主要是因为仍在实施 turbolinks。谢谢大家的帮助。
标签: javascript ruby-on-rails ruby-on-rails-4 capybara turbolinks