capybara click_link带有问号参数

时间:2016-05-27 23:33:12

标签: ruby-on-rails rspec capybara

我尝试使用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>

任何人都知道为什么会发生这种情况?

1 个答案:

答案 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)