2011-03-22 79 views
0

我有一堆用rspec编写的组合控制器/视图测试。我添加了水豚宝石,并写了一些整合测试,通过罚款。唯一的问题是,现在在我所有的控制器的测试,在那里我有安装Capybara后控制器损坏?

response.should have_selector(“一些选择”)

rspec的给错误,如:

NoMethodError: 
     undefined method `has_selector?' for #<ActionController::TestResponse:0xa03e7ec> 

当我运行控制器试验。我猜测Capybara正在我的控制器测试中使用,并且已经覆盖了一些Rspec方法。我怎样才能解决这个问题?

# gemfile.rb 
group :test do 
    gem 'rspec' 
    gem "capybara" 
    gem "launchy" 
    gem 'factory_girl_rails', '1.0' 
end 

# spec_helper.rb 
RSpec.configure do |config| 
    config.include IntegrationSpecHelper, :type => :request 
end 

下面是一个失败的测试的例子:

# spec/controllers/books_controller_spec.rb 
require 'spec_helper' 

describe BooksController do 
    render_views 

    it "should have the right page title" do 
    get :show, :id => @book.ean 
    response.should have_selector("title", :content => "Lexicase | " + @book.title) 
    end 
end 

和它相关的错误:

1) BooksController GET 'show' should have the right page title 
    Failure/Error: response.should have_selector("title", :content => "Lexicase | " + @book.title) 
    NoMethodError: 
     undefined method `has_selector?' for #<ActionController::TestResponse:0xa8488c0> 
    # ./spec/controllers/books_controller_spec.rb:23:in `block (3 levels) in <top (required)>' 
+0

您可以添加失败的测试吗? – shingara 2011-03-22 08:46:06

+0

更新了原来的帖子。 – 2011-03-22 08:57:51

回答

2

你可能使用Webrat较早,并has_selector?是一个Webrat匹配器。 Capybaras没有has_selector匹配器,它有一个称为has_css的匹配器。您可能希望将“has_selector”替换为“has_css”。

+1

无论如何,你对Webrat是正确的。据我所知,有一个has_selector?方法在Capybara(http://rubydoc.info/github/jnicklas/capybara/master/Capybara/RSpecMatchers),但它在页面方法而不是请求方法。另一件事是,我不认为我可以像webling一样使用“get:show”。我必须使用访问(book_path(@ book.ean))。然而,访问只能通过设计发出请求,这使得它不适合进行控制器单元测试。我在这里错过了一个更大的问题。 – 2011-03-22 09:30:27

+1

大声笑,事实证明,水豚和Webrat并不相互排斥,正如我最初设想的那样。问题解决了! – 2011-03-22 09:56:00

+3

我希望部落格博主停止给Capybara提供Webrat的替代替代品,或者至少通过对您的代码进行更改来限制声明。我必须做很多小的改动才能让我的代码在切换后正常工作。 – 2011-03-23 17:21:20

1

水豚助手只能在请求规格内工作。创建一个新的要求规范,或传递:类型=>:要求在描述块的一部分,就像这样:

describe "test for the testing test", :type => :request do 
    it "should work with capybara" do 
    visit root_path 
    click_link "Home" 
    page.should WHATEVA 
    end 
end 

我意识到这个问题被问得很久以前,但我想我无论如何都会分享。 GLHF