ruby-on-rails - 如何断言没有进行方法调用,没有任何实例?
问题描述
我有一个类,在一种情况下应该调用:my_method
,但在另一种情况下不能调用方法:my_method
。我想测试这两种情况。另外,我希望测试记录:my_method
不应该调用的情况。
any_instance
通常不鼓励使用,所以我很乐意学习一种替代它的好方法。
此代码片段是我想编写的测试类型的简化示例。
class TestSubject
def call
call_me
end
def call_me; end
def never_mind; end
end
require 'rspec'
spec = RSpec.describe 'TestSubject' do
describe '#call' do
it 'calls #call_me' do
expect_any_instance_of(TestSubject).to receive(:call_me)
TestSubject.new.call
end
it 'does not call #never_mind' do
expect_any_instance_of(TestSubject).not_to receive(:never_mind)
TestSubject.new.call
end
end
end
spec.run # => true
它有效,但使用 expect_any_instance_of
方法,不推荐。
如何更换它?
解决方案
我会做这样的事情
describe TestSubject do
describe '#call' do
it 'does not call #something' do
subject = TestSubject.new
allow(subject).to receive(:something)
subject.call
expect(subject).not_to have_received(:something)
end
end
end
希望这有帮助!
推荐阅读
- python - 如何使用“for”循环在文件夹中获取不同图像的类别。我已经有一个训练有素的模型
- reactjs - 重定向到另一条路线后,侧边栏切换不起作用
- javascript - 首次登录时的 React-Native 欢迎屏幕
- python - 动态覆盖 Python 文档字符串
- java - 加密期间不明确的消息填充
- mysql - MSQL & MySQL/PDO 连接是否存在冲突?
- yocto - 如何为两台不同的机器和相同的 bblayers 构建 Yocto conf 文件
- java - JUnit java.lang.NullPointerException
- python - 为什么内置的 .sort() 函数比手动编码的排序算法更有效?
- angular - kendoGrid / Kendo Angular中的行编辑问题