2012-09-20 81 views
15

鑑於我在ApplicationHelper模塊中有一個full_title方法,如何在RSpec請求規範中訪問它?我可以在RSpec請求中訪問Application Helper方法嗎?

我現在下面的代碼:

app/helpers/application_helper.rb

module ApplicationHelper 

    # Returns the full title on a per-page basis. 
    def full_title(page_title) 
     base_title = "My Site title" 
     logger.debug "page_title: #{page_title}" 
     if page_title.empty? 
     base_title 
     else 
     "#{page_title} - #{base_title}" 
     end 
    end 

spec/requests/user_pages_spec.rb

require 'spec_helper' 

    describe "User Pages" do 
     subject { page } 

     describe "signup page" do 
      before { visit signup_path } 

      it { should have_selector('h2', text: 'Sign up') } 
      it { should have_selector('title', text: full_title('Sign Up')) } 

     end 
    end 

在運行這個天賦,我得到這個錯誤信息:

NoMethodError: undefined method full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x00000003d43138>

根據Michael Hartl的Rails Tutorial中的測試,我應該能夠訪問我的用戶規範中的應用程序幫助程序方法。我在這裏犯了什麼錯誤?

+0

我有相同的代碼,它適用於我。你能否在錯誤信息中添加更多信息?另外,你有一個github回購,你可以分享? –

+0

你是否在'spec/support'目錄下用helper創建了'utilities.rb'文件? – veritas1

+0

我檢查了[你的代碼](https://github.com/movingahead/sample_app)並通過了所有規格。你有沒有遷移你的數據庫,而不是重新啓動spork? –

回答

2

根據本書的列表5.26創建幫助者spec/support/utilities.rb

+4

據推測,它在application_helper.rb中,因爲你想在你的應用程序中使用它。將它移入spec /會防止這種情況發生,並且複製它不是非常乾燥。 Nultyi's是更好的方法。 – Brandon

+1

是的,如果有輔助方法的規範。 – veritas1

33

另一種選擇是直接將其包含在spec_helper

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

我做Ruby on Rails Tutorial使用每顆寶石的當前最新版本(Rails的4.0版本)。我遇到了一個類似的問題,想知道如何將ApplicationHelper包含在規範中。我得到了它與下面的代碼工作:

規格/ rails_helper.rb

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

規格/請求/ user_pages_spec.rb

require 'rails_helper' 

describe "User pages", type: :feature do 
    subject { page } 

    describe "signup page" do 
    before { visit signup_path } 

    it { is_expected.to have_selector('h2', text: 'Sign up') } 
    it { is_expected.to have_selector('title', text: full_title('Sign Up')) } 
    end 
end 

的Gemfile

... 
# ruby 2.2.1 
gem 'rails', '4.2.1' 
... 
group :development, :test do 
    gem 'rspec-rails', '~> 3.2.1' 
    ... 
end 

group :test do 
    gem 'capybara', '~> 2.4.4' 
    ... 
+1

這應該被接受回答:DRY – yamori

相關問題