ruby-on-rails – 在rspec中存根未实现的方法
发布时间:2020-12-16 19:10:36 所属栏目:百科 来源:网络整理
导读:我正在测试我的模块,我决定测试它与匿名类: subject(:klass) { Class.new { include MyModule } } MyModule在klass中使用方法名称.为了让我的规范工作,我需要存根这个方法名称(未实现).所以我写道: subject { klass.new }allow(subject).to receive(:name)
我正在测试我的模块,我决定测试它与匿名类:
subject(:klass) { Class.new { include MyModule } } MyModule在klass中使用方法名称.为了让我的规范工作,我需要存根这个方法名称(未实现).所以我写道: subject { klass.new } allow(subject).to receive(:name).and_return('SOreadytohelp') } 但它引起了: RSpec::Mocks::MockExpectationError: #<#<Class:0x007feb67a17750>:0x007feb67c7adf8> does not implement: name from spec-support-3.3.0/lib/rspec/support.rb:86:in `block in <module:Support>' 如何在不定义的情况下存根此方法? 解决方法
RSpec引发了这个异常,因为对原始对象上不存在的方法进行存根是没有用的.
模拟方法总是容易出错,因为模拟可能与原始实现的行为不同,因此即使原始实现返回错误(或甚至不存在),规范也可能成功.允许模拟不存在的方法是完全错误的. 因此,我认为你不应该试图绕过这个例外.只需在您的类中添加一个名称方法,如果在测试环境之外运行,则会引发明确的异常: def self.name raise NotImplementedError # TODO: check specs... end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |