Rspec заглушка не работает - PullRequest
4 голосов
/ 31 марта 2012

У меня есть следующие спецификации для тестирования метода контроллера:

context "#create" do
  it "should redirect when model is valid" do
    User.stub!(:valid?).and_return(true)
    post :create, :user => FactoryGirl.attributes_for(:user)
    response.should redirect_to("/")
  end
  it "should render new template when model is invalid" do
    User.stub!(:valid?).and_return(false)
    post :create, :user => FactoryGirl.attributes_for(:user)
    response.should render_template(:new)
  end
end

И сам контроллер:

def create
  @user = User.new(params[:user])
  if @user.save
    redirect_to "/", :notice => "User created"
  else
    render "new"
  end
end

Довольно простой код, но каким-то образом метод stub! просто не заглушает, поэтому вторая спецификация завершается с expecting <"new"> but rendering with <"">. Он просто перенаправляет, как если бы valid? вернул true.

Я довольно новичок в мире Rails. Что мне не хватает? Спасибо.

1 Ответ

4 голосов
/ 31 марта 2012

При сохранении объекта Rails вызывает valid? для экземпляра класса. Но вы указали valid? на сам класс . Это не сработает.

То, что вы хотите сделать здесь, это заглушка save в экземпляре сохраняемого пользователя, например,

User.stub(:new) { mock_model(User, :save => true) }

@user = User.new # @user теперь является фиктивным объектом

@user.save # фиктивный объект возвращает true

Для другого примера:

User.stub(:new) { mock_model(User, :save => false) }

@user = User.new # опять же, @user - пародия

@user.save # фиктивный объект возвращает false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...