heartcombo / devise

Flexible authentication solution for Rails with Warden.
http://blog.plataformatec.com.br/tag/devise/
MIT License
23.98k stars 5.55k forks source link

Cannot test reset password using Capybara, token is not passed into custom mailer #2914

Closed TrevorHinesley closed 10 years ago

TrevorHinesley commented 10 years ago

I'm using Rails 4.1.0.rc1 with Devise 3.2.3. The reset password functionality works in reality, but I cannot get the test to pass because as soon as the "Reset password" button is clicked using Capybara, my custom mailer breaks because the token is not passed into the mailer:

require 'spec_helper'

describe "Password" do

  describe "#new" do
    let(:user) { create(:user) }

    it "emails user when a password reset is requested" do
      visit sign_in_path
      click_link "click here"
      fill_in "Email", :with => user.email
      click_button "Reset password"
      current_path.should eq(unauthenticated_root_path)
      last_email.to.should include(user.email)
    end
  end
end

And the resulting error is:

Failures:

  1) Password #new emails user when a password reset is requested
  Failure/Error: click_button "Reset password"
  NoMethodError:
  undefined method `[]' for nil:NilClass
  # ./app/mailers/my_devise_mailer.rb:12:in `reset_password_instructions'
  # ./spec/features/devise/password_spec.rb:12:in `block (3 levels) in <top (required)>'
  # -e:1:in `<main>'

Below is the custom mailer, all you have to do is run the above test with the below mailer:

class MyDeviseMailer < MandrillMailer::TemplateMailer
  include Devise::Controllers::UrlHelpers

  default from: "blah@blah.com"

  def reset_password_instructions(user, token, hsh = {})
    mandrill_mail template: 'Reset Password',
                  subject: 'Reset your password',
                  to: user.email,
                  vars: {
                    'FIRST_NAME' => user.try(:first_name).try(:capitalize),
                    'RESET_PASSWORD_URL' => edit_user_password_url(reset_password_token: token)
                  }
  end
end

And here is the password/new view:

<div class="container">
  <div class="row">

    <div class="row">
      <div class="login-box">
        <h2>Forgot your password?</h2>

        <%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post, class: "form-horizontal" }) do |f| %>
          <%= devise_error_messages! %>

          <fieldset>
            <%= f.email_field :email, class: "input-large col-xs-12", placeholder: "Email", :autofocus => true %>

            <div class="clearfix"></div>
            <div class="field-spacer"></div>

            <%= f.submit "Reset password", class: "btn btn-primary col-xs-12" %>

            <div class="clearfix"></div>
            <div class="field-spacer"></div>

          </fieldset>
        <% end %>
      </div>
    </div><!--/row-->

      </div><!--/row-->   

</div><!--/container-->
josevalim commented 10 years ago

Can you show the custom mailer? Are you sure you are using the @token instance variable?

josevalim commented 10 years ago

Also, what is line 12? There is no [] access in your code but the stacktrace reports so.

TrevorHinesley commented 10 years ago

The custom mailer is shown... it's called MyDeviseMailer, line 12 is:

'RESET_PASSWORD_URL' => edit_user_password_url(reset_password_token: token)

so token is the [] error from what I'm gathering.

josevalim commented 10 years ago

@TrevorHinesley sorry, I meant the custom mailer template, but now I realize it is not relevant for this discussion.

I still can't understand the error. There is no expr[] in line 12. Can you please run tests with the --backtrace option and paste them here?

TrevorHinesley commented 10 years ago

Sure, below is the backtrace:

Failures:

  1) Password #new emails user when a password reset is requested
     Failure/Error: click_button "Reset password"
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/mandrill_mailer-0.4.3/lib/mandrill_mailer/template_mailer.rb:334:in `method_missing'
     # ./app/mailers/my_devise_mailer.rb:12:in `reset_password_instructions'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/mandrill_mailer-0.4.3/lib/mandrill_mailer/template_mailer.rb:313:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/mandrill_mailer-0.4.3/lib/mandrill_mailer/template_mailer.rb:313:in `method_missing'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/devise-3.2.3/lib/devise/models/authenticatable.rb:173:in `send_devise_notification'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/devise-3.2.3/lib/devise/models/recoverable.rb:54:in `send_reset_password_instructions'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/devise-3.2.3/lib/devise/models/recoverable.rb:100:in `send_reset_password_instructions'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/devise-3.2.3/app/controllers/devise/passwords_controller.rb:13:in `create'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/abstract_controller/base.rb:189:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/rendering.rb:10:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:113:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:113:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:229:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:229:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:229:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:229:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:166:in `block in halting'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:86:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:86:in `run_callbacks'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/abstract_controller/callbacks.rb:19:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/rescue.rb:29:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/notifications.rb:159:in `block in instrument'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/notifications.rb:159:in `instrument'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activerecord-4.1.0.rc1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/abstract_controller/base.rb:136:in `process'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionview-4.1.0.rc1/lib/action_view/rendering.rb:30:in `process'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal.rb:195:in `dispatch'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_controller/metal.rb:231:in `block in action'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/routing/route_set.rb:80:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/routing/route_set.rb:48:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/routing/mapper.rb:45:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/journey/router.rb:71:in `block in call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/journey/router.rb:59:in `each'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/journey/router.rb:59:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/routing/route_set.rb:676:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/warden-1.2.3/lib/warden/manager.rb:35:in `block in call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/warden-1.2.3/lib/warden/manager.rb:34:in `catch'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/warden-1.2.3/lib/warden/manager.rb:34:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/etag.rb:23:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/conditionalget.rb:35:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/head.rb:11:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/flash.rb:254:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:225:in `context'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:220:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/cookies.rb:551:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activerecord-4.1.0.rc1/lib/active_record/query_cache.rb:36:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activerecord-4.1.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/callbacks.rb:82:in `run_callbacks'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/railties-4.1.0.rc1/lib/rails/rack/logger.rb:38:in `call_app'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/railties-4.1.0.rc1/lib/rails/rack/logger.rb:20:in `block in call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/tagged_logging.rb:68:in `block in tagged'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/tagged_logging.rb:26:in `tagged'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/tagged_logging.rb:68:in `tagged'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/railties-4.1.0.rc1/lib/rails/rack/logger.rb:20:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/request_id.rb:21:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/runtime.rb:17:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/activesupport-4.1.0.rc1/lib/active_support/cache/strategy/local_cache.rb:87:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/actionpack-4.1.0.rc1/lib/action_dispatch/middleware/static.rb:64:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/railties-4.1.0.rc1/lib/rails/engine.rb:515:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/railties-4.1.0.rc1/lib/rails/application.rb:142:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/builder.rb:138:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/urlmap.rb:65:in `block in call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/urlmap.rb:50:in `each'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-1.5.2/lib/rack/urlmap.rb:50:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-test-0.6.2/lib/rack/mock_session.rb:30:in `request'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-test-0.6.2/lib/rack/test.rb:230:in `process_request'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rack-test-0.6.2/lib/rack/test.rb:66:in `post'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/rack_test/browser.rb:60:in `process'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/rack_test/browser.rb:35:in `process_and_follow_redirects'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/rack_test/browser.rb:26:in `submit'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/rack_test/form.rb:74:in `submit'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/rack_test/node.rb:56:in `click'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/node/element.rb:118:in `block in click'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/node/base.rb:81:in `synchronize'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/node/element.rb:118:in `click'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/node/actions.rb:37:in `click_button'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/session.rb:396:in `block (2 levels) in <class:Session>'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/capybara-2.2.1/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
     # ./spec/features/devise/password_spec.rb:12:in `block (3 levels) in <top (required)>'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:114:in `instance_eval'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:114:in `block in run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:179:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:179:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/extensions/instance_eval_with_args.rb:16:in `instance_exec'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/extensions/instance_eval_with_args.rb:16:in `instance_eval_with_args'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:247:in `instance_eval_with_args'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/hooks.rb:106:in `block (2 levels) in run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/hooks.rb:108:in `call'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/hooks.rb:108:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/hooks.rb:446:in `run_hook'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:340:in `run_around_each_hooks'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:256:in `with_around_each_hooks'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example.rb:111:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:390:in `block in run_examples'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:386:in `map'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:386:in `run_examples'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:371:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:372:in `block in run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:372:in `map'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:372:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/command_line.rb:28:in `map'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/command_line.rb:28:in `block in run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/reporter.rb:58:in `report'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/command_line.rb:25:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/runner.rb:80:in `run'
     # /Users/Trevor/.rvm/gems/ruby-2.1.0@bailbetter/gems/rspec-core-2.14.7/lib/rspec/core/runner.rb:17:in `block in autorun'
josevalim commented 10 years ago

Sorry, I can 't see what is wrong as I can't see any access using expr[] in the code as the stacktrace reports.

TrevorHinesley commented 10 years ago

Sorry, this wound up being my fault. I needed to do this in test.rb:

config.mandrill_mailer.default_url_options = { :host => "localhost:3000" }

Feel free to close this. Thanks for your help.