#ruby-on-rails #ruby #rspec
#ruby-on-rails #ruby #rspec
Вопрос:
У меня есть следующие методы в моем контроллере:
def create
@user = User.new(params[:user])
if @user.save
redirect_to log_in_path, notice: 'Signed up!'
else
render "new"
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path, notice: 'User was deleted.'
end
и спецификации:
describe "POST 'create'" do
it "should allow create user" do
@user = Factory(:user)
post 'create', :id => @user
response.should be_success
end
describe "DELETE 'destroy'" do
it "should delete the user" do
@user = Factory(:user)
delete "destroy", :id => @user
response.should redirect_to users_path
end
end
Я не понимаю, почему тест для метода create выполняется, даже если происходит перенаправление сразу после сохранения объекта. если я установлю:
response.should redirect_to log_in_path
как ожидается, тест завершится неудачей, то же самое для метода destroy, если я переключу ожидание на:
response.should be_success
произойдет сбой. Есть предложения?
Спасибо
Ответ №1:
Фактический ответ на ваше действие create равен 200 OK (даже если ваша модель недействительна и не сохранена), и это то, что вы тестируете прямо сейчас.
В остальном ваш тест create никуда не годится. Действие Create принимает пользовательский хэш в качестве параметра, а не идентификатор пользователя. Вы, вероятно, хотите что-то вроде этого:
it "should allow create user" do
@user = Factory.attributes_for(:user)
post 'create', :user => @user
@user.persisted?.should be_true
response.should be_redirect
end