2016-12-29 43 views
0

我目前對我的一個郵件程序有一個失敗的測試,無法找出是什麼原因造成的。我已經嘗試了一些其他解決方案,比如將Rails.application.routes.default_url_options[:host] = '???'添加到配置環境文件中,但無濟於事。以下是錯誤輸出形成終端失敗梅勒測試--ActionView :: Template :: Error:缺少主機鏈接到

Error: 
OrderMailerTest#test_shipped: 
ActionView::Template::Error: undefined method `protect_against_forgery?' for #<#<Class:0x007f97fe5f0080>:0x007f97ff82b790> 
    app/views/line_items/_line_item.html.erb:9:in `_app_views_line_items__line_item_html_erb__1698223746397690403_70145401700580' 
    app/views/order_mailer/shipped.html.erb:7:in `_app_views_order_mailer_shipped_html_erb__790900287724335052_70145401782860' 
    app/mailers/order_mailer.rb:23:in `shipped' 
    test/mailers/order_mailer_test.rb:14:in `block in <class:OrderMailerTest>' 


bin/rails test test/mailers/order_mailer_test.rb:12 

order_mailer_test.rb

require 'test_helper' 

class OrderMailerTest < ActionMailer::TestCase 
    test "received" do 
    mail = OrderMailer.received(orders(:one)) 
    assert_equal "Pragmatic Store Order Confirmation", mail.subject 
    assert_equal ["[email protected]"], mail.to 
    assert_equal ["[email protected]"], mail.from 
    assert_match /1 x Programming Ruby 1.9/, mail.body.encoded 
    end 

    test "shipped" do 
    mail = OrderMailer.shipped(orders(:one)) 
    assert_equal "Pragmatic Store Order Shipped", mail.subject 
    assert_equal ["[email protected]"], mail.to 
    assert_equal ["[email protected]"], mail.from 
    assert_match /<td>1&times;<\/td>\s*<td>Programming Ruby 1.9<\/td>/, mail.body.encoded 
    end 
end 

和我的配置文件。

development.rb

Rails.application.configure do 
    # Settings specified here will take precedence over those in config/application.rb. 

     # In the development environment your application's code is reloaded on 
     # every request. This slows down response time but is perfect for development 
     # since you don't have to restart the web server when you make code changes. 
     config.cache_classes = false 

     # Do not eager load code on boot. 
     config.eager_load = false 

     # Show full error reports. 
     config.consider_all_requests_local = true 

     # Enable/disable caching. By default caching is disabled. 
     if Rails.root.join('tmp/caching-dev.txt').exist? 
     config.action_controller.perform_caching = true 

     config.cache_store = :memory_store 
     config.public_file_server.headers = { 
      'Cache-Control' => 'public, max-age=172800' 
     } 
     else 
     config.action_controller.perform_caching = false 

     config.cache_store = :null_store 
     end 

     # Don't care if the mailer can't send. 
     config.action_mailer.raise_delivery_errors = false 

     config.action_mailer.perform_caching = false 

     # Print deprecation notices to the Rails logger. 
     config.active_support.deprecation = :log 

     # Raise an error on page load if there are pending migrations. 
     config.active_record.migration_error = :page_load 

     # Debug mode disables concatenation and preprocessing of assets. 
     # This option may cause significant delays in view rendering with a large 
     # number of complex assets. 
     config.assets.debug = true 

     # Suppress logger output for asset requests. 
     config.assets.quiet = true 

     # Raises error for missing translations 
     # config.action_view.raise_on_missing_translations = true 

     # Use an evented file watcher to asynchronously detect changes in source code, 
     # routes, locales, etc. This feature depends on the listen gem. 
     config.file_watcher = ActiveSupport::EventedFileUpdateChecker 

     # Don't actually send emails 
     config.action_mailer.delivery_method = :test 

     # Alternate configuration example using gmail 
     config.action_mailer.delivery_method = :smtp 
     config.action_mailer.smtp_settings = { 
     address:  "smtp.gmail.com", 
     port:   587, 
     domain:   "domain.of.sender.net", 
     authentication: "plain", 
     user_name:  "dave", 
     password:  "secret", 
     enable_starttls_auto: true 
     } 
    end 

production.rb

Rails.application.configure do 
    # Settings specified here will take precedence over those in config/application.rb. 

    # Code is not reloaded between requests. 
    config.cache_classes = true 

    # Eager load code on boot. This eager loads most of Rails and 
    # your application in memory, allowing both threaded web servers 
    # and those relying on copy on write to perform better. 
    # Rake tasks automatically ignore this option for performance. 
    config.eager_load = true 

    # Full error reports are disabled and caching is turned on. 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

    # Disable serving static files from the `/public` folder by default since 
    # Apache or NGINX already handles this. 
    config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 

    # Compress JavaScripts and CSS. 
    config.assets.js_compressor = :uglifier 
    # config.assets.css_compressor = :sass 

    # Do not fallback to assets pipeline if a precompiled asset is missed. 
    config.assets.compile = false 

    # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb 

    # Enable serving of images, stylesheets, and JavaScripts from an asset server. 
    # config.action_controller.asset_host = 'http://assets.example.com' 

    # Specifies the header that your server uses for sending files. 
    # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache 
    # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX 

    # Mount Action Cable outside main process or domain 
    # config.action_cable.mount_path = nil 
    # config.action_cable.url = 'wss://example.com/cable' 
    # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] 

    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 
    # config.force_ssl = true 

    # Use the lowest log level to ensure availability of diagnostic information 
    # when problems arise. 
    config.log_level = :debug 

    # Prepend all log lines with the following tags. 
    config.log_tags = [ :request_id ] 

    # Use a different cache store in production. 
    # config.cache_store = :mem_cache_store 

    # Use a real queuing backend for Active Job (and separate queues per environment) 
    # config.active_job.queue_adapter  = :resque 
    # config.active_job.queue_name_prefix = "depot_#{Rails.env}" 
    config.action_mailer.perform_caching = false 

    # Ignore bad email addresses and do not raise email delivery errors. 
    # Set this to true and configure the email server for immediate delivery to raise delivery errors. 
    # config.action_mailer.raise_delivery_errors = false 

    # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 
    # the I18n.default_locale when a translation cannot be found). 
    config.i18n.fallbacks = true 

    # Send deprecation notices to registered listeners. 
    config.active_support.deprecation = :notify 

    # Use default logging formatter so that PID and timestamp are not suppressed. 
    config.log_formatter = ::Logger::Formatter.new 

    # Use a different logger for distributed setups. 
    # require 'syslog/logger' 
    # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') 

    if ENV["RAILS_LOG_TO_STDOUT"].present? 
    logger   = ActiveSupport::Logger.new(STDOUT) 
    logger.formatter = config.log_formatter 
    config.logger = ActiveSupport::TaggedLogging.new(logger) 
    end 

    # Do not dump schema after migrations. 
    config.active_record.dump_schema_after_migration = false 
end 

test.rb

Rails.application.configure do 
    # Settings specified here will take precedence over those in config/application.rb. 

    # The test environment is used exclusively to run your application's 
    # test suite. You never need to work with it otherwise. Remember that 
    # your test database is "scratch space" for the test suite and is wiped 
    # and recreated between test runs. Don't rely on the data there! 
    config.cache_classes = true 

    # Do not eager load code on boot. This avoids loading your whole application 
    # just for the purpose of running a single test. If you are using a tool that 
    # preloads Rails for running tests, you may have to set it to true. 
    config.eager_load = false 

    # Configure public file server for tests with Cache-Control for performance. 
    config.public_file_server.enabled = true 
    config.public_file_server.headers = { 
    'Cache-Control' => 'public, max-age=3600' 
    } 

    # Show full error reports and disable caching. 
    config.consider_all_requests_local  = true 
    config.action_controller.perform_caching = false 

    # Raise exceptions instead of rendering exception templates. 
    config.action_dispatch.show_exceptions = false 

    # Disable request forgery protection in test environment. 
    config.action_controller.allow_forgery_protection = false 
    config.action_mailer.perform_caching = false 

    # Tell Action Mailer not to deliver emails to the real world. 
    # The :test delivery method accumulates sent emails in the 
    # ActionMailer::Base.deliveries array. 
    config.action_mailer.delivery_method = :test 

    # Print deprecation notices to the stderr. 
    config.active_support.deprecation = :stderr 

    # Raises error for missing translations 
    # config.action_view.raise_on_missing_translations = true 
end 

任何建議,將不勝感激!!

+0

是否使用的是軌道版本? – Johny

+0

我在版本5.0.0.1 – jamesemcc

回答

0

嘗試增加這隻有你的郵件程序會使用,看看這個工作的幫手:

def protect_against_forgery? 
     false 
end 
+0

我試過這個,似乎沒有做任何事情。 – jamesemcc

+0

對不起,我不小心按下了輸入,無法編輯我的評論。 我向order_mailer_test.rb添加了'require'helpers/validation_helper''行。並在helpers文件夾中創建一個名爲validation_helper.rb的助手。上面的代碼在'module ValidationHelper'中 – jamesemcc

相關問題