gpt4 book ai didi

ruby - 如何在摩卡中断言模拟 block

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

这个例子是人为的,请不要照搬它作为我的代码。

我需要声明如下内容:

def mymethod
Dir.chdir('/tmp') do
`ls`
end
end

最后我想声明:

  1. 使用适当的参数调用 Dir.chdir。
  2. ` 使用适当的参数调用

我从...开始

Dir.expects(:chdir).with('/tmp')

但之后我不确定如何调用传递给 Dir.chdir 的 block 。

最佳答案

你需要使用 mocha yields方法。此外,为 backtick 方法编写期望值也很有趣。你需要做出这样的期望:

expects("`")

但是在什么对象上?您可能会想到 KernelObject,但这实际上行不通。

例如,给定这个模块:

module MyMethod
def self.mymethod
Dir.chdir('/tmp') do
`ls`
end
end
end

我可以这样写一个测试:

class MyMethodTest < Test::Unit::TestCase
def test_my_method
mock_block = mock
mock_directory_contents = mock
MyMethod.expects("`").with('ls').returns(mock_directory_contents)
Dir.expects(:chdir).yields(mock_block).returns(mock_directory_contents)
assert_equal mock_directory_contents, MyMethod.mymethod
end
end

技巧的一部分是弄清楚哪个对象需要调用 backtick 方法。这取决于上下文——调用该方法时 self 是什么。这里是模块 MyMethod,但根据您定义 mymethod 的位置,它会有所不同。

关于ruby - 如何在摩卡中断言模拟 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878773/

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