0

我正在升级我的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 
+0

您是否正在使用'js_errors:true'运行Poltergeist以确保您没有任何JS错误或使用不受支持的JS函数/功能(Poltergeist 2.1.1不支持ES2015 - 尽管如此,新的2.5 beta版本) 。另外请注意,在你的JS中使用'let'会在Poltergeist 2.1.1 –

+0

中悄然失败。另外 - 由于'sign_in'没有等待登录完成,我预计你的测试会失败。这意味着您的测试中的'page.visit路径'可能会在auth cookie被设置之前调用,因此不会载入您认为它的页面。你应该有一些确保登录已完成的内容,比如'expect(page).to have_text('You have logged in!')'或者页面上显示的任何内容以表示登录成功。 –

+0

比你对所有指针,登录问题是我所拥有的,所以我一定会尝试。我试图安装phantomjs的测试版,但签署的问题可能是我正在遇到的 –

回答

0

我有这个问题。我的解决方案是(如托马斯沃波尔在评论中建议的)在提交登录表单后添加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之类的事件运行。