Turbolinks 5 /水豚/ Rails
我正在升级我的Rails应用程序以使用Turbolink 5来利用本机包装。我已经更新了所有javascript,并且所有内容在浏览器和Android应用程序中都按预期工作。使用js true时,我遇到了一些水豚测试问题。在撰写本文时,我正在使用最新的水豚(2.11.0),poltergeist(1.12.0)和phantomjs(2.1)。我也尝试过水豚-webkit驱动程序,但都没有成功。Turbolinks 5 /水豚/ Rails
我看起来有问题的地方在于,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
我有这个问题。我的解决方案是(如托马斯沃波尔在评论中建议的)在提交登录表单后添加expect(page).to have_text("Some text from the page you should be redirected to after login")
。
在我们的例子中,我们有一个log_in_buyer_using_the_form
测试帮手,所以我修改了它采取一种说法:log_in_buyer_using_the_form(wait_for_content: item.title)
我在这里的假设是,我们需要1.等待形式的Ajax提交发生,2。然后根据Ajax响应等待Turbolinks重定向。通过让测试等待一些内容出现,我们知道它已经过去了。
我还没试过的东西比较优雅,但理论上应该是这样的,那就是设置一个事件监听器,使用page.execute_script
循环,直到turbolinks:load
之类的事件运行。
您是否正在使用'js_errors:true'运行Poltergeist以确保您没有任何JS错误或使用不受支持的JS函数/功能(Poltergeist 2.1.1不支持ES2015 - 尽管如此,新的2.5 beta版本) 。另外请注意,在你的JS中使用'let'会在Poltergeist 2.1.1 –
中悄然失败。另外 - 由于'sign_in'没有等待登录完成,我预计你的测试会失败。这意味着您的测试中的'page.visit路径'可能会在auth cookie被设置之前调用,因此不会载入您认为它的页面。你应该有一些确保登录已完成的内容,比如'expect(page).to have_text('You have logged in!')'或者页面上显示的任何内容以表示登录成功。 –
比你对所有指针,登录问题是我所拥有的,所以我一定会尝试。我试图安装phantomjs的测试版,但签署的问题可能是我正在遇到的 –