用webrat选择href选择特定链接

时间:2011-05-24 06:03:18

标签: ruby-on-rails integration-testing rspec2 webrat

我正在为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

2 个答案:

答案 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,但它没有引用它的来源。

相关问题