Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用Rspec测试调用了“discard_on”的rails 6?_Ruby On Rails_Rspec_Rails Activejob - Fatal编程技术网

Ruby on rails 如何使用Rspec测试调用了“discard_on”的rails 6?

Ruby on rails 如何使用Rspec测试调用了“discard_on”的rails 6?,ruby-on-rails,rspec,rails-activejob,Ruby On Rails,Rspec,Rails Activejob,我有一个作业,它应该放弃一个特定的错误: class SomeJob

我有一个作业,它应该放弃一个特定的错误:

class SomeJob
我尝试过,基于模拟测试,如下所示:

context'#放弃'do'
它“应该在Errno::enoint error”上放弃
期望(描述的类)的任何实例接收(:执行)和提升(Errno::enoint.new)
期望(SomeJob).接收到(放弃打开)
上传作业。立即执行(**args)
结束
结束
但我一直得到以下错误:

#预期已在上收到discard_,但该对象不是间谍或方法未被存根。
如果我这样尝试:

期望(SomeJob.)的任何实例接收(:执行)和提升(Errno::enoint)
期望(描述的类)的任何实例接收(:discard\u on)
SomeJob.perform_now(**args)
它失败,出现以下错误:

SomeJob未在上实现#放弃#

是一种类方法。这根本不起作用,因为在引发异常时它实际上没有被调用。它只是一个宏方法,使用
rescue\u from
设置异常处理程序。我建议您研究一种不同的方法来测试行为,而不是深入内部。
的任何实例都被认为是非常糟糕的代码味道,这是有原因的。谢谢@max。所以我应该测试发生在块内的事情是否应该调用?另外,为什么
的任何实例都是一种代码气味?这已经解释清楚了。是的。测试代码的功能(例如不创建记录或记录错误),而不是测试代码的功能。如果perform正在调用其他方法,则可以模拟其中一个方法以引发错误,然后在perform上不断言任何引发的内容。但是我完全同意@max,这是一种测试,Rails正在做应该做的事情……你没有得到很多。