我想检查一下,当点击图标链接时,current_path是'show'动作的路径。
所以,鉴于这个HTML:
<a class="btn btn-xs" href="/admin/hotels/1">
<i class="fa fa-eye fa-lg"></i>
</a>
这次水豚测试:
describe "GET /hotels", js:true do
before :each do
@hotel = create(:hotel)
visit admin.hotels_path
end
it "eye icon links to show" do
find(:css, 'i.fa.fa-eye.fa-lg').find(:xpath,".//..").click
expect(current_path).to eq(admin.hotel_path(@hotel))
end
end
我收到此错误消息:
1) Hotels index hotel creation GET /hotels eye icon link to show
Failure/Error: expect(current_path).to eq(admin.hotel_path(@hotel))
expected: "/admin/hotels/560bb674467261c7a4000002"
got: "/admin/hotels"
我推断find(:css, 'i.fa.fa-eye.fa-lg').find(:xpath,".//..").click
没有按预期工作。
find(:css, 'i.fa.fa-eye.fa-lg').find(:xpath,".//..")
的执行正在返回:
=> #<Capybara::Element tag="a">
我做错了吗?
答案 0 :(得分:3)
测试失败的原因:js是因为点击链接只会这样做。它不会等待点击的结果(加载新页面)。因为在仍然获得原始路径之后立即调用current_path。删除:js停止使用poltergeist,而是使用同步的rack-test,但缺少很多真正的浏览器行为。在capybara 2.4中,您需要检查显示页面上的内容,一旦出现然后获取当前路径,但是capybara 2.5具有将使用capybaras等待行为的have_current_path匹配器。此外,没有必要点击一个元素,点击其内容就像一个用户会做的应该工作得很好。所以
find(:css, 'i.fa.fa-eye.fa-lg').click
expect(page).to have_current_path(admin.hotel_path(@hotel))
既可以使用也可以不使用:js
答案 1 :(得分:0)
问题是:
describe "GET /hotels", js:true do
我已将其替换为:
describe "GET /hotels" do
然后它使用了poltergeist,没有错误。