ruby-on-rails 为什么水豚在请求规格中不可用?

ymdaylpp  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(161)

使用rspec和capybara开发一个新的Rails 3.2.9应用程序。
我在Gemfile中有以下内容:

gem 'rspec-rails'
gem 'capybara'

字符串
在spec/spec_helper.rb中:

require 'rspec/rails'
require 'capybara/rspec'


在spec/requests/asdf_spec.rb中:

require 'spec_helper'
describe 'Asdf' do
  describe "GET /asdfs" do
    it "should list asdfs" do
      visit asdfs_path
    end
  end
end


此测试失败:

Failure/Error: visit asdfs_path
NoMethodError:
 undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x007fa7b68961a0>
# ./spec/requests/asdfs_spec.rb:19:in `block (4 levels) in <top (required)>'


所以看起来水豚没有喝醉。为什么不呢?我觉得我以前做过十几次同样的事情……可能是在做一些愚蠢的事情。

kyxcudwk

kyxcudwk1#

所以这是水豚版本2的变化。我发现了这个:
http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html
它解释说:
在升级到capybara 2.0之后,*capybara将不会在RSpec请求specs中默认可用 *。相反,一种新的specs类型--feature specs--已经被创建用于capybara。
要升级到水豚2.0,你需要做几件事:

  • 将rspec-rails升级到2.12.0或更高版本
  • 将所有使用capybara的测试从spec/requests移到spec/features。Capybara测试使用visit方法,通常针对页面进行Assert。
93ze6v8z

93ze6v8z2#

对于在升级到2.x时遇到同样问题的人来说,这只是一些额外的信息。请查看Upgrading to Capybara 2部分的rspec-rails文档。
基本上,为了使用Capybara DSL(页面和访问),您必须将现有的规范移动到spec/features目录中。因此,您只能在验收测试中使用page & visit。在控制器和请求规范中没有更多的页面和访问。仅允许在控制器和请求规范中使用机架测试DSL (get|post|put|delete|head/response.body)
这是推荐的,但有一种方法可以让你的规格保持原样:

RSpec.configure do |c|
  c.include Capybara::DSL, :example_group => {
    :file_path => "spec/requests"
  }
end

字符串
文档指出,如果你走这条路,那么你就是在覆盖预期的行为,你是在冒险。
而且绝对不要把这作为不升级到Capybara 2.x的理由。功能规格很容易习惯,也很容易阅读。feature只是describe的别名,backgroundbefore的别名,scenarioit的别名,givenlet的别名。
希望这能帮助那些对新变化感到困惑的人。

nnsrf1az

nnsrf1az3#

原因是因为它被认为是一个更好的默认编写测试,只关注一个感兴趣的领域。有时它可以是一个有点匆忙创建正确类型的请求只呈现一个视图。
然而,也可能有视图规范过于孤立的情况,因为它们模拟了所有的控制器逻辑,例如,当你测试授权依赖行为时,可能就是这种情况。

在请求规范中使用Capybara匹配器

使用它们的最简单方法是显式地包含请求规范所需的匹配器:

RSpec.configure do |config|
  config.include Capybara::RSpecMatchers, type: :request
end

字符串
取自here

nnt7mjpx

nnt7mjpx4#

问题在于水豚宝石本身。
gem 'capybara', '1.1.2'解决了此问题(2.0.x版失败)

相关问题