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

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

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

最佳答案

您不应该将参数传递给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

关于ruby - 如何在rspec中将参数传递给主题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49250745/

10-13 05:21