Ruby on rails 允许模拟(double(“object”)像提供的方法一样响应:call或:send?
在一个小的重构模式下,我有一堆测试,它们有两个用于清除方法调用的测试,例如:Ruby on rails 允许模拟(double(“object”)像提供的方法一样响应:call或:send?,ruby-on-rails,rspec,Ruby On Rails,Rspec,在一个小的重构模式下,我有一堆测试,它们有两个用于清除方法调用的测试,例如: connection = double("api_connection", create_thing: double("thing")) 在本例中,调用connection.create\u thing将返回预期的thingdouble 但是,我现在更改了代码,使实际代码的运行方式如下: connection.send(:create_thing) 这导致了一系列错误: Double "api_connection
connection = double("api_connection", create_thing: double("thing"))
在本例中,调用connection.create\u thing将返回预期的thing
double
但是,我现在更改了代码,使实际代码的运行方式如下:
connection.send(:create_thing)
这导致了一系列错误:
Double "api_connection" received unexpected message :call with (:create_thing)
因为这是一个重构,所以我不愿意只修改测试的两倍来响应调用。有没有一种方法可以将这些double设置为接受
:call
,就像它们接受传递给:call
的任何方法一样?嗯,这是一个PEBCAK错误
:call
不是ruby对象方法——我打算使用的是:send
。将我的代码替换为:将s发送到我的:调用s位置,使一切正常
幸好我没有尝试“修复”这些测试——它们没有正确地通过