3
在the documentation RSpec的嘲弄维护者RSpec:'allow_any_instance_of'的替代选择是什么?
...阻止它有许多原因使用...
列出的理由似乎涉及expect
版本的这一功能,但他们两者没有区别。
我可以看到为什么expect
版本不鼓励,但allow
版本似乎没有共享列出的问题。
好像使用allow
版本是测试某些行为的最便捷方式。
例子:
我测试部分航线的授权。一种方法是在数据库中创建一个用户,但这似乎相当笨拙,我更愿意创建一个模拟对象并在授权调用期间返回它。此示例是测试使用复杂库的代码的特定情况,这些库分别进行了测试。
鉴于它气馁,有什么更好的方法?
我发现缺少的文件,这就是为什么我问的问题。特别是它没有区分“允许”和“期望”的变化,也没有提出替代方案。 – agbodike
我相信文档的作者不鼓励这些方法的'allow'和'expect'版本,尽管他们在例子中使用了'expect'。 他们提供了一个使用'Widget'的例子,如: ''' 因此,有一些语义混淆边缘情况。例如,在expect_any_instance_of(窗口小部件)。为了接收(:名称).twice它是不明确的特定实例是否预期接收名称两次,或如果两个接收总的预期。 (是前者。) ''' 相反,尝试通过在合作者的模拟并在其上制作的期望,而不是任何实例。 –
不幸的是,除了改变你编写测试的方式之外,我不相信Rspec中有任何替代方案,这是他们提出的。 “允许”和“期望”都非常宽泛,可以掩盖你可能犯下的其他错误。 – jmkoni