RSpec:如何正确测试遍历集合/调用实例方法的类方法

时间:2018-07-10 16:01:40

标签: ruby-on-rails testing rspec rspec-rails

请考虑以下类和类方法:

class Foo < ActiveRecord::Base
    scope :active, -> { where(deleted: false) }

    class << self
      def some_class_method
        active.each do |foo|
          foo.some_instance_method
        end
      end
    end
end

在RSpec中测试这种方法的最佳实践是什么?到目前为止,我所学到的信息表明,我应该确保Foo的每个活动实例都收到对some_instance_method的调用,但是如果我对Foo.some_class_method有所期望,据我所知,我无法断言对Foo的任何实例的嵌套期望。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我采用的方法是分别测试some_instance_method,例如:

it 'should return some value' do
  expect(foo.some_instance_method).to eq('some value')
end

然后,您可以运行类方法并测试转换是否按预期进行:

context 'Foo#some_class_method' do
  it 'should have some effect' do
    expect(some_comparison_variable).to eq('some_before_state')
    Foo.some_class_method
    expect(some_comparison_variable).to eq('some_after_state')
  end
end