1

配列からテストを生成する方法

describe "some test" do
  let(:some) { generated_array }

  # raise error - undefined local variable or method
  some.each do |key|
    it "#{key} test" do
      true
    end
  end

  # will work
  [1,2,3].each do |key|
   ...

end

RSpecでどのように実現できますか?

4

1 に答える 1

1

letRSpec は DSL であるため、そのように外側のコンテキストでを使用してテストを行うことはできません。RSpec は、テストを実行する前に、まずサンプルのスペック ファイルを読み取ります。some.each実際のテストが実行される前に、DSL 解析中にヒットします。

someこれは、サンプル オブジェクトで定義されているため、このエラーが発生しますが、サンプル グループ オブジェクトのコンテキストで実行されますdescribecontext

これは次の方法で確認できます。

describe 'thing' do
  p self.ancestors
  #=> [#<Class:0x007fa97a0761f8>, RSpec::Core::ExampleGroup, RSpec::Matchers,
  #    RSpec::Core::MockFrameworkAdapter, RSpec::Core::SharedExampleGroup,
  #    RSpec::Core::Pending, RSpec::Core::Extensions::InstanceEvalWithArgs,
  #    RSpec::Core::ExampleGroup::LetDefinitions,
  #    RSpec::Core::ExampleGroup::NamedSubjectPreventSuper,
  #    RSpec::Core::MemoizedHelpers, Object, PP::ObjectMixin, Kernel,
  #    BasicObject]

  it { p selfs }
  #=> #<RSpec::Core::ExampleGroup::Nested_1:0x007f8d1b397790 ...>
end
于 2013-05-28T18:20:21.037 に答える