【问题标题】:How to pass argument to subject in rspec如何在rspec中将参数传递给主题
【发布时间】:2018-03-13 07:43:18
【问题描述】:

我有一个主题块,我想在不同的地方重复使用。

subject(:stubbed_data) do
  expect(response.body).to eq(dynamic_var)
end

dynamic_var 变量对于不同的测试用例会有所不同。有没有办法用参数调用subbed_data 主题,以便我可以为dynamic_var 变量提供动态值?

【问题讨论】:

    标签: ruby ruby-on-rails-3 rspec3


    【解决方案1】:

    您不应该将参数传递给subject。而且,顺便说一句,这是一个错误的地方进行断言(如expect),它们需要在it 块内完成。 但是,您可以在 let 块中定义(和重新定义)您的依赖项,如下所示:

    class MyClass
      attr_reader :arg
      def initialize(arg)
        @arg = arg
      end
    end
    
    RSpec.describe MyClass do
      subject { MyClass.new(dynamic) }
      let(:dynamic) { 'default value' }
    
      context 'it works with default value' do
        it { expect(subject.arg).to eq 'default value' }
      end
      context 'it works with dynamic value' do
        let(:dynamic) { 'dynamic value' }
        it { expect(subject.arg).to eq 'dynamic value' }
      end
    end
    

    【讨论】:

    • 如果您尝试测试一个无法初始化的类方法,并且想要测试许多不同的输入,该怎么办?
    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多