复杂的RSpec参数测试

4
我有一个方法需要测试,该方法会使用特定的对象进行调用。但是,识别这个对象有些复杂,因为我对对象的特定实例并不感兴趣,而是要符合某些条件的实例。
例如,我的代码可能像这样:
some_complex_object = ComplexObject.generate(params)
my_function(some_complex_object)

在我的测试中,我想要检查以下内容:

test_complex_object = ComplexObject.generate(test_params)
subject.should_receive(:my_function).with(test_complex_object)

但是我确切地知道,当比较“some_complex_object”和“test_complex_object”时,“ComplexObject#==”将返回false,因为这是期望的行为(在其他地方我依赖于标准的“==”行为,因此不想为“ComplexObject”重载它)。
我认为自己需要编写这样的测试是一个问题,我更喜欢重新构建代码,以便我不需要编写这样的测试,但不幸的是这是一个更大的任务,需要重写很多现有的代码,因此是我想实现但目前无法在时间限制内完成的长期解决方案。
Rspec是否有一种方法可以在测试中对参数进行更复杂的比较?理想情况下,我希望能够使用块,这样我就可以编写任意比较代码。

这会有帮助吗?http://apidock.com/rspec/Spec/Mocks/ArgumentMatchers/duck_type - Arup Rakshit
不行,需要进行值比较,而不仅仅是检查对象是否响应某些内容。 - Gordon Seidoh Worley
1个回答

5

自从我最初写下这个问题以来,我在一些地方转向了RSpec 3,它还支持可嵌套的satisfy匹配器,可以接受任意的代码块。 - Gordon Seidoh Worley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接