首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ruby rspec:如何让存根在每次调用时都有不同的行为

在Ruby的RSpec测试框架中,如果你想要让一个存根(stub)在每次调用时都有不同的行为,你可以使用and_return方法结合块(block)或者yield关键字来实现。这样可以让你在每次调用存根时执行不同的代码逻辑。

以下是一个使用块来实现每次调用都有不同行为的例子:

代码语言:txt
复制
RSpec.describe "Stubbing with different behaviors" do
  let(:my_object) { double("MyObject") }

  it "returns different values on each call" do
    allow(my_object).to receive(:my_method) do |arg|
      # 这里可以根据传入的参数或其他条件返回不同的值
      case arg
      when 1 then "first"
      when 2 then "second"
      else "unknown"
      end
    end

    expect(my_object.my_method(1)).to eq("first")
    expect(my_object.my_method(2)).to eq("second")
    expect(my_object.my_method(3)).to eq("unknown")
  end
end

在这个例子中,my_method存根根据传入的参数返回不同的字符串值。

如果你想要在存根调用时执行一些代码并返回结果,可以使用yield关键字:

代码语言:txt
复制
RSpec.describe "Stubbing with yield" do
  let(:my_object) { double("MyObject") }

  it "yields different blocks on each call" do
    allow(my_object).to receive(:my_method) do |&block|
      # 这里可以执行传入的块,并根据需要返回不同的结果
      block.call
    end

    expect(my_object.my_method { "first" }).to eq("first")
    expect(my_object.my_method { "second" }).to eq("second")
  end
end

在这个例子中,my_method存根执行传入的块,并返回块的结果。

这些技巧可以帮助你在RSpec测试中创建更加灵活和动态的存根行为。记住,使用这些高级特性时要小心,确保你的测试仍然保持清晰和可维护。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券