我尝试使用Rspec + Capybara + FactoryGirl在rails中进行测试。
在我的页面中,用户可以单击生成的链接:
<a href="<%= email_path(emails: booking.dummy_user.email) %>" title="<%= t(".send_email") %>" id="send_email_dummy_<%= booking.dummy_user.id %>" >
<span class="icon-envelope"></span>
</a>
在我的测试中,我正在做:
click_link "send_email_dummy_" + dummy_user.id.to_s
current_path.should eq(email_path(locale: "en", emails: dummy_user.email))
然而,不是测试通过而是返回:
expected: "/en/email?emails=student%40email.com"
got: "/en/email"
我打印了测试生成的页面,并正确生成了链接:
<a href="/en/email?emails=student%40email.com" title="Send Email" id="send_email_dummy_1" >
<span class="icon-envelope"></span>
</a>
任何人都知道为什么会发生这种情况?
答案 0 :(得分:2)
不要在Capybara中使用eq
和current_path或current_url,一旦你开始使用支持JS的驱动程序并且事情变得异步,你会后悔的。而是使用have_current_path
匹配器
page.should have_current_path(email_path(locale: "en", emails: dummy_user.email))
默认情况下,将包含匹配中查询参数的路径(在您的情况下需要)。如果你不想要它们,你可以做
page.should have_current_path(email_path(locale: "en", emails: dummy_user.email), only_path: true)
如果你想比较你可以做的整个网址
page.should have_current_path(email_path(locale: "en", emails: dummy_user.email), url: true)