Rspec redirect_to показать действие - PullRequest
1 голос
/ 26 мая 2011

Я изучаю рельсы и столкнулся с проблемой с Rspec.У меня есть следующий тест для контроллера:

describe PostsController, "creating a new post" do
  it "should redirect and show the post" do
    Post.stub!(:save).and_return(true)
    post "create"
    response.should redirect_to :action => "show"
  end
end

Когда я запускаю этот тест, я получаю следующий сбой:

PostsController creating a new post should redirect and show the post
Failure/Error: response.should redirect_to :action => "show"
ActionController::RoutingError:
  No route matches {:action=>"show", :controller=>"posts"}
  # ./spec/controllers/posts_controller_spec.rb:8:in `block (2 levels) in <top       (required)>'

Тем не менее мой, когда я проверяю свои маршруты, я вижу свое действие показадля моего контроллера сообщений:

post GET    /posts/:id(.:format)      {:action=>"show", :controller=>"posts"}

Я, вероятно, упускаю что-то очень простое, но изо всех сил пытаюсь его найти.

Спасибо.

Ответы [ 3 ]

11 голосов
/ 26 мая 2011

Вы забыли id.

Я обычно пишу

response.should redirect_to(post_path(assigns[:post])
2 голосов
/ 22 мая 2013

Краткое примечание к вышесказанному. В версии 2.13.0 rspec-rails синтаксис, который я использовал для этой работы, был:

expect(response).to redirect_to(video_path(assigns[:video]))

(я тестировал метод создания контроллера для моей модели видео). Вот мой полный блок описания rspec для #create:

describe "POST #create" do

    context "with valid attributes" do

        it "saves the new video in the database" do
            expect{
                post :create, video: attributes_for(:video)
            }.to change(Video, :count).by(1)
        end

        it "redirects to the videos page" do
            post :create, video: attributes_for(:video)
            expect(response).to redirect_to(video_path(assigns[:video]))
        end

    end

end
1 голос
/ 23 мая 2013

Вы также можете проверить перенаправление более коротким способом. Просто:

expect(response).to redirect_to assigns[:video]
...