2011-09-04 5 views
2

저는 Rspec, Capybara 및 Rails를 처음 사용합니다. Rails 3.1을 사용하여 기본 메일러 테스트를 실행하려고합니다. 저는 기본적으로 Railscast # 275를 따르고 있습니다. 여기서 Ryan은 URL 헬퍼를 언급하는데, 나는 그를 제외하고 여기서하고 있습니다.Rails의 URL 도우미에 액세스하기 RSpec 메일러 테스트

spec/mailer/user_mailer_spec.rb은 다음과 같습니다

describe UserMailer do 
    it 'should have access to URL helpers' do 
    lambda { password_resets_path }.should_not raise_error 
    end 
end 

하지만 내가 사용하는 URL 헬퍼를 좋아하는 것 같지 않습니다. 주어진 오류는 다음과 같습니다

Timothys-MacBook-Pro:onelist-rails-3.1 tim$ rspec spec 
F.... 

Failures: 

    1) UserMailer should have access to URL helpers 
    Failure/Error: lambda { password_resets_path }.should_not raise_error 
     expected no Exception, got #<NameError: undefined local variable or method `password_resets_path' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fa004697390>> 
    # ./spec/mailer/user_mailer_spec.rb:19:in `block (2 levels) in <top (required)>' 

Finished in 1.31 seconds 
5 examples, 1 failure 

Failed examples: 

rspec ./spec/mailer/user_mailer_spec.rb:18 # UserMailer should have access to URL helpers 

적절한 경로

는 다음과 같이 :

Timothys-MacBook-Pro:onelist-rails-3.1 tim$ rake routes | grep password 
    password_resets GET /password_resets(.:format)    {:action=>"index", :controller=>"password_resets"} 
        POST /password_resets(.:format)    {:action=>"create", :controller=>"password_resets"} 
new_password_reset GET /password_resets/new(.:format)   {:action=>"new", :controller=>"password_resets"} 
edit_password_reset GET /password_resets/:id/edit(.:format)  {:action=>"edit", :controller=>"password_resets"} 
    password_reset GET /password_resets/:id(.:format)   {:action=>"show", :controller=>"password_resets"} 
        PUT /password_resets/:id(.:format)   {:action=>"update", :controller=>"password_resets"} 
        DELETE /password_resets/:id(.:format)   {:action=>"destroy", :controller=>"password_resets"} 

이 어떤 소용이 있다면, 내 spec/spec_helper.rb는 다음과 같습니다

# This file is copied to spec/ when you run 'rails generate rspec:install'   
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'capybara/rspec' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    config.mock_with :rspec 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    # config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    config.include(MailerMacros) 
    config.before(:each) { reset_email } 
end 

나는이 라인을 가지고 내 config/environments/test.rb

# Set URLs to work properly in email 
config.action_mailer.default_url_options = { :host => "www.example.com" } 
+0

내 메일러 중 하나에서 테스트를 실행했는데 정상적으로 작동했습니다. 오류가있는 샘플 앱을 만들어 github에 올려 놓고 살펴 보겠습니다. – Gazler

+0

예. 어쨌든 실제로 오픈 소스입니다. https://github.com/TimFletcher/OneListRails –

+0

그래서 실제로 Ryan의 Railscast # 275를 설정하고 실행했습니다. 테스트는 정상적으로 통과되었습니다. 그것은 내 프로젝트에 특정한 것으로 보인다. –

답변

1

Rspec에서 URL 도우미를 자동로드하려면 메일러가 들어있는 폴더가 mailer이 아닌 mailers으로 지정되어 있는지 확인해야합니다.

관련 문제