Я очень новичок в рельсах, и я слежу за множеством замечательных уроков и примеров там, в сообществе, так что в первую очередь спасибо!rspec не получает метод сохранения
У меня возникла проблема с моим тестовым кодом. Приложение работает, и я вижу, как хвост журналов тестов записывается в базу данных, но по какой-то причине он не возвращает метод сохранения должным образом.
Это в основном прямо из Rails Tutorial
«успех» дела Майкла Hartl в возвращаете «ожидается сохранить, но получили 0 раз», а «случай неудачи перенаправляет на неправильном месте. Похоже, что это игнорирование, если/еще блока.
Вот соответствующий код из спецификации контроллера и контроллера
Я бы очень признателен за любое понимание этого.
Спасибо,-Joe
class WebsitesController < ApplicationController
before_filter :require_user, :only => [:new, :edit, :create, :destroy]
def new
@website = Website.new
@title = "Add New Website"
end
def edit
@website = Website.find(params[:id])
@title = "Edit Website"
end
def create
@website = current_user.websites.build(params[:website])
if @website.save
flash[:success] = "Website Added!"
redirect_to(profile_url)
else
render 'new'
@title = "Add New Website"
end
end
def destroy
end
end
require 'spec_helper'
describe WebsitesController do
integrate_views
describe "POST 'create'" do
before(:each) do
activate_authlogic
@user = Factory(:user)
UserSession.create(@user, true)
@attr = {
:domain => "http://www.example.com",
:description => "example site"
}
@website = Factory(:website, @attr.merge(:user => @user))
@user.websites.stub!(:build).and_return(@website)
end
describe "failure" do
before(:each) do
@website.should_receive(:save).and_return(false)
end
it "should render the 'new' page" do
post :create, :website => @attr
response.should render_template('websites/new')
end
end
describe "success" do
before(:each) do
@website.should_receive(:save).and_return(true)
end
it "should redirect to the profile page" do
post :create, :website => @attr
response.should redirect_to(profile_url)
end
it "should have a flash message" do
post :create, :website => @attr
flash[:success].should =~ /website added/i
end
end
end
end
Спасибо, что, похоже, решает часть проблемы. Хотя я думаю, что происходит нечто более тонкое. Условие отказа перенаправляется на то же место, что и успех (только в тестах). Похоже, что он игнорирует инструкцию if/else в контроллере. – jpoday
Интересно. Правильно ли перенаправляется действие успеха? Возможно ли, что 'before_filter' не позволяет сохранить сохранение? – zetetic
Действие успеха действительно перенаправляется. Это очень странно. Если я полностью удаляю if/else и просто покидаю @ website.save, все тесты проходят (затушевывают или должны получать), но затем он жалуется, что представления отсутствуют. Я думаю, что это before_filter. У меня такое чувство, что я не правильно создаю UserSession в тестах. – jpoday