在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
答案 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
。