gpt4 book ai didi

ruby-on-rails - Rspec::允许每个实例接收消息

转载 作者:行者123 更新时间:2023-11-28 21:10:42 26 4
gpt4 key购买 nike

我想为类的每个实例模拟一个方法。如果我允许_any_instance_of 那么如果 instance_count = 1

但是,如果我有同一个类的多个实例,则第二个实例不会被模拟捕获。

我正试图从不同的站点获取一堆 token 。但在测试期间,我真的不需要“真正的” token 。所以我计划模拟 get_token 以返回“1111”。

class Foo
def children
[Bar.new, Bar.new] #....
end
def get_tokens
children.map(&:get_token) || []
end
end

那么现在我如何才能不模拟 get_tokens?

最佳答案

这样的解决方案怎么样:

require "spec_helper"
require "ostruct"

class Bar
def get_token
("a".."f").to_a.shuffle.join # simulating randomness
end
end

class Foo
def children
[Bar.new, Bar.new, Bar.new]
end

def get_tokens
children.map(&:get_token) || []
end
end

RSpec.describe Foo do
before do
allow(Bar).to receive(:new).and_return(OpenStruct.new(get_token: "123"))
end

it "produces proper list of tokens" do
expect(Foo.new.get_tokens).to eq ["123", "123", "123"]
end
end

我们在 Bar 上添加 new 方法以返回 something quacks get_token(所以它的行为类似于 Bar),它返回一个固定的字符串。这是您可以依靠的东西。

希望对您有所帮助!

关于ruby-on-rails - Rspec::允许每个实例接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com