访问我的rspec中找不到的方法

时间:2012-01-14 14:52:13

标签: ruby-on-rails rspec jruby

我的java web应用程序在tomcat上运行http://localhost:8080/

编写我的第一个规范,home_spec:

require 'spec_helper'


describe "home" do

    it "should render the home page" do
       visit "/"

       page.should have_content("hello world")
    end

end

跑步:

rspec

我明白了:

F

Failures:

  1) home should render the home page
     Failure/Error: visit "/"
     NoMethodError:
       undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x242870b7>
     # ./spec/home/home_spec.rb:7:in `(root)'

Finished in 0.012 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/home/home_spec.rb:6 # home should render the home page

这不应该有效吗,因为我在spec_helper中包含了水豚?

如何知道访问正确的网址?如果我的网址是localhost:3030或localhost:8080怎么办?

我的宝石文件:

source 'http://rubygems.org'

gem "activerecord"
gem "rspec"
gem "capybara"
gem "activerecord-jdbcmysql-adapter"

我的spec_helper:

require 'capybara/rspec'

6 个答案:

答案 0 :(得分:134)

关于rspec问题(https://github.com/rspec/rspec-rails/issues/360

你应该把

config.include Capybara::DSL

spec_helper.rb 中,位于配置块内。

答案 1 :(得分:23)

Capybara::RSpec现在查看的包含Capybara::DSLCapybara::RSpecMatchers的默认目录已从requests更改为features

requests目录重命名为features后,我再次获得了匹配器和DSL方法,而无需明确包含它们。

请参阅以下commit

答案 2 :(得分:9)

还要确保您的测试位于 / spec / features 目录中。根据{{​​3}},在RSpec请求规范中默认不提供Capybara v2及更高版本。他们建议“......将任何使用水豚的测试从规格/要求转移到规格/功能。”

答案 3 :(得分:6)

默认情况下,如果文件位于spec / requests,spec / integration或示例组中有:type => :request,则会自动包含capybara DSL。

因为你的文件在spec / home中,所以没有包括水豚帮手。您可以符合上述模式之一,也可以添加include Capybara::DSL也可以执行操作(您可能还需要复制一些将要设置的before(:each)内容。)

答案 4 :(得分:1)

First check it out

如果你不成功,

将您的规范助手的末尾实际添加到RSpec.configure块之外

module ::RSpec::Core
  class ExampleGroup
    include Capybara::DSL
    include Capybara::RSpecMatchers
  end
end

答案 5 :(得分:-1)

1)添加到'rails_helper'配置:

config.include Capybara::DSL
config.include Capybara::RSpecMatchers

And comment out the `require 'spec_helper'` line.

2)添加到&#39; spec_helper&#39;:

require 'rails_helper'