【问题标题】:Rspec generate "it do" from arrayRspec从数组生成“它做”
【发布时间】:2013-05-28 15:24:42
【问题描述】:
如何从数组生成它测试
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 来实现?
【问题讨论】:
标签:
rspec
rspec2
rspec-rails
【解决方案1】:
由于 RSpec 是 DSL,因此您无法在外部上下文中使用 let 进行测试。 RSpec 在运行测试之前首先读取示例规范文件。在运行任何实际测试之前,它会在 DSL 解析期间命中 some.each。
此错误是因为在示例对象上定义了 some,但 describe 和 context 在示例组对象上下文中运行。
你可以看到这个:
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