Rails by Example教程请求示例和Capybara

时间:2011-02-17 19:25:47

标签: ruby-on-rails capybara

在Michael Hartl的Rails on Rails教程中,请求示例对响应进行断言。我安装了cabybara和牛排宝石来创建验收测试。安装capybara后,请求示例配置为使用capybara。水豚示例具有不同的语法,无法识别响应 如何重置请求示例以RSpec示例运行?

测试错误:

4) Users signup failure should not make a new user  
    Failure/Error: click_button  
    wrong number of arguments (0 for 1)  
    # ./spec/requests/users_spec.rb:13  
    # ./spec/requests/users_spec.rb:7 

请求示例

describe "failure" do  
    it "should not make a new user" do  
        lambda do  
            visit signup_path  
            fill_in "Name", :with => ""  
            fill_in "Email", :with => ""  
            fill_in "Password", :with => ""  
            fill_in "Confirmation", :with => ""  
            click_button  
            response.should render_template('users/new')  
        end.should_not change(User, :count)  
    end
end

2 个答案:

答案 0 :(得分:0)

这可能与rspec-rails request_example_group.rb有关。

request_example_group.rb

如果水豚线被注释掉,那么请求示例不会默认为水豚。

capybara do
   include Capybara
end

在验收示例中,包括水豚。

require File.expand_path(File.dirname(__FILE__) + '/acceptance_helper')

feature "This Is My First Feature", %q{
    In order to ...
    As a ...
    I want to ...
} do

    include Capybara
    scenario "Scenario name" do
        visit signup_path
        fill_in "Name", :with => ""
        fill_in "Email", :with => ""
        fill_in "Password", :with => ""
        fill_in "Confirmation", :with => ""
        click_button "Sign up"
        page.has_content?('welcome to the sample app')
    end
end

我最终要求rspec-rails并评论出水豚线。 在Gemfile中,从fork安装的gem。

为什么要这么麻烦?我们想要白盒和黑盒测试。

答案 1 :(得分:0)

正如您在答案中正确指出的那样,如果安装了rspec-rails将include Capybara。我认为他们假设include Capybara永远不会伤害,以防你需要它。这对你来说有问题吗?换句话说,Capybara DSL具体与什么冲突?

(这可能也值得提及RSpec mailing list。)

至于您发布的错误,您似乎只是错过了click_button方法的参数。