如果在类体中调用了方法,如何在Ruby/Rails中进行测试?

Sea*_*yar 0 ruby rspec ruby-on-rails

我无法想象如何在类体内测试类方法调用.

我该怎么测试呢?

class User
  act_as_paranoid
end


it 'is called from class body' do
  expect(User).to receive(:acts_as_paranoid)
  User.new
end
Run Code Online (Sandbox Code Playgroud)

max*_*ner 5

通常建议测试行为,而不是实现.在这种情况下,无论在行为方面为此类acts_as_paranoid 提供什么,都是您要测试的内容.

但是,如果您确信acts_as_paranoid正确调用提供了所需的所有行为,并且只想测试它是否已添加到类中,则可以使用:

assert User.included_modules.include? ActsAsParanoid::Core
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我在这里简要地查看了acts_as_paranoid的源代码:https://github.com/ActsAsParanoid/acts_as_paranoid/blob/master/lib/acts_as_paranoid.rb#L8

您可以在第50行看到它将ActsAsParanoid模块扩展为ActiveRecord :: Base,这使模型类可以访问该acts_as_paranoid方法.如果你看一下这个方法的定义,你可以看到它的调用include ActsAsParanoid::Core