2012-06-04 2 views
1

У меня есть интересная ситуация, которая оставляет меня почесывая мою голову. Я создал контроллер (без модели), чтобы сгенерировать сбрасывание пароля. Я определил RESTful маршрут к контроллеру:RSpec маршрута распознавания

routes.rb

resources :password_resets 

Я создал некоторое действие на контроллере, в частности, мое действие редактирования:

password_resets_controller. Р.Б.

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 

Что может быть неправильным в моих тестах/маршрутах?

Большое спасибо.

ответ

4

Проверьте, имеет ли завод user значение password_reset_token. Скорее всего, это нуль, та же ошибка маршрутизации, которую вы можете получить за любой edit_something_url(nil)

+0

Это было действительно то, что происходило! Немного запутанное сообщение об ошибке от RSpec, но эй, теперь я буду знать. Большое спасибо! – alexs333