頭を悩ませている興味深い状況があります。パスワードのリセットを生成するためのコントローラー (モデルなし) を作成しました。コントローラーへの RESTful ルートを定義しました。
ルート.rb
resources :password_resets
コントローラーでいくつかのアクション、特に編集アクションを作成しました。
password_resets_controller.rb
class PasswordResetsController < ApplicationController
  # code omitted
  def edit
    @user = User.find_by_password_reset_token!(params[:id])
  end
  # code omitted
end
ユーザーは、私がユーザーに送信した電子メールから編集にアクセスできます。
password_reset.html.haml
%p To reset your password, click the URL below.
= edit_password_reset_url(@user.password_reset_token)
これまでのところ、コードを使用することができました。次に、メーラーをテストする仕様があります。
  describe "password reset" do
    let(:user) { FactoryGirl.create(:user) }
    let(:mail) { UserMailer.password_reset(user) }
    it "sends user password reset url" do
      mail.to.should eq([user.email])
    end
  end
驚いたことに、次のことがわかりました。
 Failure/Error: let(:mail) { UserMailer.password_reset(user) }
 ActionView::Template::Error:
   No route matches {:action=>"edit", :controller=>"password_resets"}
 # ./app/views/user_mailer/password_reset.html.haml:5:in `_app_views_user_mailer_password_reset_html_haml__1760284087840822602_11954840'
 # ./app/mailers/user_mailer.rb:7:in `password_reset'
それでも、少なくとも私のルートを見ると、ルートの一致があります。
 password_resets GET    /password_resets(.:format)             password_resets#index
                       POST   /password_resets(.:format)             password_resets#create
    new_password_reset GET    /password_resets/new(.:format)         password_resets#new
   edit_password_reset GET    /password_resets/:id/edit(.:format)    password_resets#edit
        password_reset GET    /password_resets/:id(.:format)         password_resets#show
                       PUT    /password_resets/:id(.:format)         password_resets#update
                       DELETE /password_resets/:id(.:format)         password_resets#destroy
テスト/ルートで何が問題になる可能性がありますか?
どうもありがとう。