ruby-on-rails - Minitest - 你如何测试一个方法没有被调用?
问题描述
我正在尝试检查是否未在after_update
回调中调用方法。
我目前正在做:
class Foo
def self.call; end
end
def Model < ActiveRecord::Base
after_update :do_something
def do_something
return unless title_changed?
Foo.call
end
end
在测试中它是这样工作的:
test 'Foo.new.bar is invoked' do
mock = Minitest::mock.new
mock.expect :call, nil
Foo.stub(:call) { update_record_to_fire_callback }
mock.verify
end
它完美地通过了,但现在我正试图做相反的事情,但没有运气,因为我不知道该怎么做。如果我做assert_not mock.verify
Minitest 无论如何都会抱怨要执行的方法。
或者也许有其他方法来检查方法没有被调用?该方法将执行昂贵的请求,因此,我想避免这种情况。
我正在使用 Rails 5,遗憾的是 Minitest。我愿意添加任何可以与这些版本一起使用的 gem。
解决方案
由于您愿意添加宝石,因此mocha非常适合。添加 gem,然后使用 mocha 的Expectation#never。您的测试可能如下所示:
test 'Foo.new.bar is not invoked' do
model = Model.new
Foo.expects(:call).never
model.update!(not_the_title: 'value')
end
推荐阅读
- javascript - HTML 和 JavaScript 中的购物车
- android - 在android中将字节数组转换为位图时面临问题
- interface - java.util 包中的哪个功能接口具有无参数和 void 返回类型的方法?
- java - 在骆驼路线中,使用 exec 组件使用 grep 制作 curl 但使用 ${HOSTNAME} 的 grep 不起作用
- c# - 从服务器检索远程文本并显示在面板中
- html - 如何使 Facebook Embedded 评论框在 div 中可滚动?
- node.js - 在Nodejs中将base64数据保存为具有透明度的PNG
- oracle - Liquibase 假设 '--' 作为评论的开始,即使它在引号内作为我的查询的一部分
- c - 通过指针理解间接并获取地址
- javascript - 如何在从数组加载元素的div上的鼠标悬停时显示名称