简体   繁体   English

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

[英]Stub Model Save Method in Rspec/Rails

This should be simple, but i can't get it to work. 这应该很简单,但我不能让它工作。 I want to stub an : 我想要存根:

@alliance.save

so that it returns true. 这样它就会返回true。 I tried : 我试过了 :

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

but it won't work. 但它不会起作用。 Any ideas ? 有任何想法吗 ?

If I'm not mistaken, Alliance.stub(:save) would affect calls to Alliance.save . 如果我没弄错的话, Alliance.stub(:save)会影响对Alliance.save调用。 You want @alliance.stub(:save).and_return(true) . 你想要@alliance.stub(:save).and_return(true)

Mocha has a useful method any_instance , so you could do something like Alliance.any_instance.stubs(:save).returns(true) , which would (as the name implies) stub the save method for any instance of Alliance . Mocha有一个有用的方法any_instance ,所以你可以做一些像Alliance.any_instance.stubs(:save).returns(true)这样的东西Alliance.any_instance.stubs(:save).returns(true)顾名思义)会为任何Alliance实例save方法。

使用新的RSpec语法:

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

You're probably looking for something like: 你可能正在寻找类似的东西:

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

The inner context allows you to work with an Alliance mock which has the save method stubbed to return true. 内部上下文允许您使用Alliance mock,其中save方法存根以返回true。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM