gpt4 book ai didi

ruby - 如何测试正在使用 RSpec 和 Mocha 调用的混合类方法?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:36 26 4
gpt4 key购买 nike

我有一个模块:

module MyModule
def do_something
# ...
end
end

由类使用如下:

class MyCommand
extend MyModule

def self.execute
# ...
do_something
end
end

如何验证 MyCommand.execute 调用了 do_something?我已经尝试使用 mocha 进行部分模拟,但是当未调用 do_something 时它不会失败:

it "calls do_something" do
MyCommand.stubs(:do_something)
MyCommand.execute
end

最佳答案

好吧,这是一个解决方案。

正如我在 this SO post 中提到的, mocking/stubbing有两种策略:

1) 使用 mocha 的 expects 将在测试结束时自动断言。在您的情况下,这意味着如果 MyCommand.executeexpects 之后未被调用,则测试将失败。

2) 更具体/更自信的方法是结合使用 stub 和 spy 。 stub 创建具有您指定行为的假对象,然后 spy 检查是否有人调用了该方法。要使用您的示例(注意这是 RSpec):

require 'mocha'
require 'bourne'

it 'calls :do_something when .execute is run' do
AnotherClass.stubs(:do_something)

MyCommand.execute

expect(AnotherClass).to have_received(:do_something)
end

# my_command.rb
class MyCommand
def self.execute
AnotherClass.do_something
end
end

因此 expect 行使用 bourne的匹配器检查并查看 :do_something 是否在 `MyCommand 上被调用。

关于ruby - 如何测试正在使用 RSpec 和 Mocha 调用的混合类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575509/

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