我有Ruby代码,它在许多地方使用反引号并想要测试它。我正在使用FlexMock并想以某种方式模拟该方法。我知道该方法是Kernel, :`但似乎无法使其与FlexMock一起使用。你会怎么做?以下是我想测试的方法示例:
def foo
result = `ls`
if result.to_a.length > 0
true
else
false
end
end
答案 0 :(得分:3)
所以事实证明反引号方法专门映射到Kernel。,这很好,直到看到FlexMock源来查看它们认为是有效的方法名称。他们使用的正则表达式主要是检查字母数字?要么 !最后,所以反引用无法匹配这个正则表达式。
在内部更改代码可以解决抛出的初始异常,但实际上并不能使代码按预期工作。我可以像pierr建议的那样对它进行monkeypatched,但是在我的测试代码中这将是非常重复的,所以我选择了替代路由,并在我的库代码中创建了一个shell方法,只进行反引号。然后可以以所需的方式模拟这种方法,因为我只在少数地方使用反引号,而不是必须更改我的许多底层代码。
答案 1 :(得分:1)
我对flexmock一无所知,但你可能想看看this。
答案 2 :(得分:0)
你应该致电
Kernel.` "cmd"
而不是使用
`cmd`
代码。然后你可以这样测试:
it "should call system ls" do
Kernel.should_receive(:`).with("ls")
Kernel.` "ls"
end
此示例使用纯rspec