Rspec / Rails中的存根模型保存方法

时间:2011-04-03 23:30:02

标签: ruby-on-rails rspec

这应该很简单,但我无法让它发挥作用。我想要存根:

@alliance.save

以便它返回true。我试过了:

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

但它不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:16)

如果我没弄错的话,Alliance.stub(:save)会影响对Alliance.save的调用。你想要@alliance.stub(:save).and_return(true)

Mocha有一个有用的方法any_instance,因此您可以执行类似Alliance.any_instance.stubs(:save).returns(true)的操作,这将(​​顾名思义)为任何实例存储save方法Alliance

答案 1 :(得分:7)

使用新的RSpec语法:

allow_any_instance_of(Alliance).to receive(:save).and_return(true)

答案 2 :(得分:4)

你可能正在寻找类似的东西:

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

内部上下文允许您使用具有存根方法存根的Alliance模拟返回true。