0

我目前正在通过 Hartl 工作。在第 5 章中,我将清单 5.27(如下)中的 Hartl 代码添加到我的 spec/requests/static_pages_spec.rb

require 'spec_helper'

describe "Static pages" do

subject { page }

describe "Home page" do
before { visit root_path }

it { should have_selector('h1',    text: 'Sample App') }
it { should have_selector('title', text: full_title('')) }
it { should_not have_selector 'title', text: '| Home' }
end

describe "Help page" do
before { visit help_path }

it { should have_selector('h1',    text: 'Help') }
it { should have_selector('title', text: full_title('Help')) }
end

describe "About page" do
before { visit about_path }

it { should have_selector('h1',    text: 'About') }
it { should have_selector('title', text: full_title('About Us')) }
end

describe "Contact page" do
before { visit contact_path }

it { should have_selector('h1',    text: 'Contact') }
it { should have_selector('title', text: full_title('Contact')) }
end
end

当我运行 $ bundle exec rspec spec/requests/static_pages_spec.rb 测试时,终端返回此错误:

Failures:

1) Static pages Home page 
 Failure/Error: it { should have_selector('title', text: full_title('')) }
 NoMethodError:
   undefined method `full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fb4b44504c8>
 # ./spec/requests/static_pages_spec.rb:11:in `block (3 levels) in <top (required)>'

2) Static pages Help page 
 Failure/Error: it { should have_selector('title', text: full_title('Help')) }
 NoMethodError:
   undefined method `full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x007fb4b46a9008>
 # ./spec/requests/static_pages_spec.rb:19:in `block (3 levels) in <top (required)>'

3) Static pages About page 
 Failure/Error: it { should have_selector('title', text: full_title('About Us')) }
 NoMethodError:
   undefined method `full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_3:0x007fb4b4430290>
 # ./spec/requests/static_pages_spec.rb:26:in `block (3 levels) in <top (required)>'

4) Static pages Contact page 
 Failure/Error: it { should have_selector('title', text: full_title('Contact')) }
 NoMethodError:
   undefined method `full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_4:0x007fb4b40e57e8>
 # ./spec/requests/static_pages_spec.rb:33:in `block (3 levels) in <top (required)>'

Finished in 0.21306 seconds
9 examples, 4 failures

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:11 # Static pages Home page 
rspec ./spec/requests/static_pages_spec.rb:19 # Static pages Help page 
rspec ./spec/requests/static_pages_spec.rb:26 # Static pages About page 
rspec ./spec/requests/static_pages_spec.rb:33 # Static pages Contact page

有任何想法吗?

4

5 回答 5

1

您好,我还关注了 Michael 的 Rails 3.2 版本教程并得到了同样的错误......试试你当前版本的水豚

我将:text更改为:content并让它工作,所以它看起来像这样:

it { should have_selector('title', content: full_title('')) }

希望有帮助,加油!

于 2013-09-25T06:08:27.220 回答
1

你的 spec_helper.rb 文件中有这一行吗?

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

你有一个看起来像这样的 spec/support/utilities.rb 文件吗?

include ApplicationHelper

def sign_in(user)
  visit signin_path
  fill_in "Email",    with: user.email
  fill_in "Password", with: user.password
  click_button "Sign in"
  # Sign in when not using Capybara as well.
  cookies[:remember_token] = user.remember_token
end

你有一个看起来像这样的 app/helpers/application_helper.rb 文件吗?

module ApplicationHelper

  # Returns the full title on a per-page basis.
  def full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      "#{base_title} | #{page_title}"
    end
  end
end

如果是这样,我认为您的错误应该消失。

于 2012-06-01T19:43:14.470 回答
0

第 5 章的练习内容为

"通过为原始辅助方法编写测试来消除对清单 5.26 中 full_title 测试帮助器的需要,如清单 5.37 所示。(您必须同时创建 spec/helpers 目录和application_helper_spec.rb文件。)然后将其包含到测试中使用清单 5.38 中的代码。”

http://ruby.railstutorial.org/chapters/filling-in-the-layout.html#sec-layout_exercises

这是否意味着我只需要“包含 ApplicationHelper”我的utilites.rb文件,因为spec/helpers/application_helper_spec.rb现在包含

require 'spec_helper'

describe ApplicationHelper do

  describe "full_title" do
    it "should include the page title" do
      full_title("foo").should =~ /foo/
    end

进行此设置后,我在运行 RSpec 测试时仍然遇到错误。他们唯一能让我通过的方法是full_titleutilites.rb

于 2012-09-27T19:57:20.043 回答
0

考虑到这篇文章已经有两年了,我想你已经明白了。不过,尝试添加

RSpec.configure do |config|
...
config.include ApplicationHelper
...
end

在 spec\requests\spec_helper.rb 中

于 2014-07-16T15:49:01.050 回答
0

当前格式应如下所示,以便您的测试通过:

it { should have_title(full_title('Help')) }

it { should have_title(full_title('About')) }

it { should have_title(full_title('Contact')) }
于 2014-03-06T00:58:40.433 回答