我有一个测试,用于检查用户从自动填充建议中选择一个选项后,路径是否已更改。我正在和Polygeist上的Capybara一起测试。但是,大概是因为我通过JS触发了页面更改,我现在必须使用sleep语句才能等待页面完成加载,这当然不太理想。
这是js:
window.location.href = suggestion.url;
这是测试:
sleep 1# Allow the time to navigate
expect(current_path).to eq(arg1)
其中arg1是预期的页面网址。
睡眠效果很好,但这并不是最佳的原因是显而易见的。如何使测试更智能并让它等待导航发生?
答案 0 :(得分:7)
不要将eq
匹配器与current_path一起使用(实际上与大多数Capybara事物一样),使用have_current_path匹配器
expect(page).to have_current_path(arg1)
将利用Capybara内置的自动等待/重试行为
答案 1 :(得分:0)
在新页面上测试某些内容(在您导航的页面上不存在),并且rspec会一直查看它(只要它在默认的等待限制内),然后检查你的道路,例如先做这样的事情
expect(page).to have_selector("a.testclass", text: "Some link on your new page")
然后你的路径测试:
expect(current_path).to eq(arg1)