Fra*_*nez 3 rspec ruby-on-rails capybara
我想检查一下,当单击图标链接时,current_path 是“显示”操作的路径。
因此,鉴于此 HTML:
<a class="btn btn-xs" href="/admin/hotels/1">
<i class="fa fa-eye fa-lg"></i>
</a>
Run Code Online (Sandbox Code Playgroud)
这个水豚测试:
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
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
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"
Run Code Online (Sandbox Code Playgroud)
我推断这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">
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
使用 :js 测试失败的原因是因为单击链接只能这样做。它不会等待点击的结果(加载新页面)。因为在仍然得到原始路径之后立即调用 current_path 。删除 :js 将停止使用 poltergeist,而是使用同步但缺乏许多真实浏览器行为的机架测试。在 capybara 2.4 中,您需要检查显示页面上的内容,一旦出现就获取当前路径,但是 capybara 2.5 具有 have_current_path 匹配器,它将利用水豚等待行为。也不需要点击 a 元素,像用户一样点击它的内容应该可以正常工作。所以
find(:css, 'i.fa.fa-eye.fa-lg').click
expect(page).to have_current_path(admin.hotel_path(@hotel))
Run Code Online (Sandbox Code Playgroud)
应该在有和没有 :js 的情况下工作
| 归档时间: |
|
| 查看次数: |
5679 次 |
| 最近记录: |