测试与rspec和cabybara的链接:新旧语法

时间:2014-03-05 01:03:43

标签: ruby-on-rails ruby rspec capybara

在rspec的旧语法中,我可以这样做:

It "should have the right URL" do 
  get :show, :id => @user
  response.should have_selector('td>a', :content => user_path(@user), 
                                        :href => user_path(@user))
end

在新的sintax中,我们可以做到这一点:

It "should have the right URL" do 
 visit user_path(@user) 
 expect(page).to have_link user_path(@user), href: user_path(@user)
end

但是,在rspec的新语法和使用capybara中,我怎么能说链接应该在哪里?在第一个例子中,我说它在'td> a'中,第二个例子怎么样?

谢谢!

编辑:

如果我试试这个:

It "should have the right URL" do 
 expect(page).to have_selector('td>a', :content => user_path(@user), 
                                        :href => user_path(@user))

我收到以下错误:

  1) UsersController GET 'show' should have the right URL
 Failure/Error: expect(page).to have_selector(:content => user_path(@user),
 ArgumentError:
   invalid keys :content, :href, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait

2 个答案:

答案 0 :(得分:2)

也许您还升级了水豚gem

尝试:

It "should have the right URL" do 
  expect(page).to have_selector("td>a[href='#{user_path(@user)}']", 
    :text=> user_path(@user))

答案 1 :(得分:0)

我认为当你说'新语法'时你引用'expect'语法而不是'should'语法 - 你有两种完全不同类型的测试。一个看起来像一个控制器规范,一个看起来像一个功能规范。

与语法的唯一区别在于您将should替换为expect.to,例如。 response.should have_selector变为expect(response).to have_selector