Ruby on rails RSpec 2.13警告:之前对受试者的定义在此

Ruby on rails RSpec 2.13警告:之前对受试者的定义在此,ruby-on-rails,rspec,Ruby On Rails,Rspec,我刚刚升级到RSpec 2.13,在运行我的规范时看到两个不同的警告: /Users/peterbrown/.rvm/gems/ruby-2.0.0-p0/gems/rspec-core-2.13.0/lib/rspec/core/memoized_helpers.rb:120: warning: method redefined; discarding old subject /Users/peterbrown/code/classy_enum/spec/classy_enum/active_

我刚刚升级到RSpec 2.13,在运行我的规范时看到两个不同的警告:

/Users/peterbrown/.rvm/gems/ruby-2.0.0-p0/gems/rspec-core-2.13.0/lib/rspec/core/memoized_helpers.rb:120: warning: method redefined; discarding old subject
/Users/peterbrown/code/classy_enum/spec/classy_enum/active_record_spec.rb:63: warning: previous definition of subject was here
我怀疑这与我如何在数组上循环并每次定义一个新主题有关:

describe DefaultDog do    
  context "with valid breed options" do
    [:golden_retriever, 'golden_retriever', Breed::GoldenRetriever.new, Breed::GoldenRetriever].each do |option|
      subject { DefaultDog.new(:breed => option) }
      it { should be_valid }
      its(:breed) { should be_a(Breed::GoldenRetriever) }
    end
  end
end
在这样的循环中定义主题有问题吗

更新:

我还应该注意,我正在使用
-w
选项运行我的规范:

RSpec::Core::RakeTask.new(:spec) do |t|
  t.ruby_opts = "-w"
end

尝试将
上下文
放入循环中:

describe DefaultDog do    
  [:golden_retriever, 'golden_retriever', Breed::GoldenRetriever.new, Breed::GoldenRetriever].each do |option|
    context "with valid breed option #{option}" do
      subject { DefaultDog.new(:breed => option) }
      it { should be_valid }
      its(:breed) { should be_a(Breed::GoldenRetriever) }
    end
  end
end

我认为,以这种方式编写涉及对集合进行迭代的测试意味着您将对集合中的每个项执行单独的测试,而不是只执行一个循环遍历集合的测试(因此重新定义主题)。我认为这是RSpec中一个低调的问题,直到最近才给我带来了很多困惑。

尝试将
上下文
放在你的循环中:

describe DefaultDog do    
  [:golden_retriever, 'golden_retriever', Breed::GoldenRetriever.new, Breed::GoldenRetriever].each do |option|
    context "with valid breed option #{option}" do
      subject { DefaultDog.new(:breed => option) }
      it { should be_valid }
      its(:breed) { should be_a(Breed::GoldenRetriever) }
    end
  end
end
我认为,以这种方式编写涉及对集合进行迭代的测试意味着您将对集合中的每个项执行单独的测试,而不是只执行一个循环遍历集合的测试(因此重新定义主题)。我认为这是RSpec中一个低调的问题,直到最近才引起了我的困惑