Метод сохранения модели-заглушки в Rspec / Rails - PullRequest
8 голосов
/ 04 апреля 2011

Это должно быть просто, но я не могу заставить его работать. Я хочу заглушить:

@alliance.save

так что он возвращает истину. Я попробовал:

Alliance.stub(:save).and_return(true)

но это не сработает. Есть идеи?

Ответы [ 3 ]

16 голосов
/ 04 апреля 2011

Если я не ошибаюсь, Alliance.stub(:save) повлияет на вызовы Alliance.save.Вы хотите @alliance.stub(:save).and_return(true).

Мокко имеет полезный метод any_instance, так что вы можете сделать что-то вроде Alliance.any_instance.stubs(:save).returns(true), что (как следует из названия) заглушит saveметод для любого экземпляра Alliance.

7 голосов
/ 02 декабря 2014

Использование нового синтаксиса RSpec:

allow_any_instance_of(Alliance).to receive(:save).and_return(true)
4 голосов
/ 04 апреля 2011

Вы, вероятно, ищете что-то вроде:

describe AllianceController do
  let(:alliance) { mock_model(Alliance) }

  describe "#<controller action>" do
    before do
      Alliance.stub :new => alliance
    end

    context "valid alliance" do
      before do
        alliance.stub :save => true
      end

      it "should ..." do

      end
    end
  end
end

Внутренний контекст позволяет вам работать с макетом Альянса, у которого есть метод сохранения, заглушенный для возврата true.

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