我正在为rspec编写集成测试,我想测试单击链接是否转到正确的模型页面。更具体地说,我想在具有相同名称但不同底层URL的链接列表上测试它。
根据我到目前为止所学到的,你不能使用带有click_link的css属性选择器,因为它只查找特定的文本或dom ID。相反,我正在尝试使用webrat within
方法,但是一旦我选择了链接,我该如何点击它?我认为链接范围内的link.click
可以正常工作,但它未能说方法click
未定义:
Failure/Error: link.click
NoMethodError:
undefined method `click' for #<Webrat::Scope:0x0000010505ae00>
这是我的测试:
require 'spec_helper'
describe "BrandLinks" do
before(:each) do
@base_title = "My App - "
@brand = Factory(:brand)
second = Factory(:brand) # <= Same name, different slug
third = Factory(:brand, :name => "Awesome USA Brand!!")
@brands = [@brand, second, third]
end
it "should show me the brand page when I click on a brand link" do
get '/brands'
within "a[href=#{brand_path(@brand)}]" do |link|
link.click
end
response.should be_success
response.should have_selector(
"title",
:content => "#{@base_title}Brand - #{@brand.name}"
)
end
end
答案 0 :(得分:0)
你试过click_link_within吗?根据文件
类似于click_link,但只查找给定选择器中的链接文本
答案 1 :(得分:0)
首先,错误消息是.click
方法未定义。请尝试使用.click_link
。
您还需要链接的文字。也就是说,within
定义范围,click_link
告诉它在该范围内单击哪个链接。
within "a[href=#{brand_path(@brand)}]" do |scope| # within a specific <a> tag
scope.click_link @brand # click on @brand text
end
click_link_within
是加上click_link的快捷方式,所以这应该与上面的相同:
click_link_within "a[href=#{brand_path(@brand)}]", @brand
我仍在努力了解within
选择器是如何工作的(这就是我发现这个问题的方法!)。这是我到目前为止所得到的:
Webrat Session对象的within
method采用selector
参数,用于将新范围推送到堆栈,方法是将选择器传递给Scope.from_scope,这将创建一个新会话{ {1}}。到目前为止,我找不到@selector = selector
的定义。这个2009 blog post表示选择器可以是CSS类型,类或ID,但它没有引用它的来源。