如何在rspec中将参数传递给主题

San*_*khe 2 ruby ruby-on-rails-3 rspec3

我有一个要在各个地方重复使用的主题块。

subject(:stubbed_data) do
  expect(response.body).to eq(dynamic_var)
end
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ein 6

您不应该将参数传递给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
Run Code Online (Sandbox Code Playgroud)

  • 如果您尝试测试无法初始化的类方法,并且想要测试许多不同的输入,该怎么办? (4认同)