Rspec如何测试类调用singleton类方法

时间:2017-08-25 11:56:05

标签: ruby-on-rails ruby rspec

课程User有一个电话has_one_time_password(encrypted: true) 我想测试User类是否有该调用。

class User < ApplicationRecord
#...
has_one_time_password(encrypted: true)
#..
end

我试过了

expect(User).to receive(:has_one_time_password).with(encrypted: true)

但我收到消息expected: 1, received: 0

1 个答案:

答案 0 :(得分:0)

我相信,当您上面expect(User)...运行时,class User < ApplicationRecord ... end已经加载到内存中,因为您的 rails_helper.rb 在顶部有一条线它:

require File.expand_path("../../config/environment", __FILE__)

因此,除非您手动加载它,否则您将无法捕获它:

expect(User).to receive(:has_one_time_password).with(encrypted: true)
require 'user'

P.S。尚未测试过这个。此外,就个人而言,我宁愿测试“行为”而不是测试代码本身,所以也许我会写一个关于has_one_time_password实际做什么行为的测试