无法使shared_contexts在rspec 3.9.0 / rspec-rails 4中工作

问题描述 投票:0回答:1

在早期版本的rspec中,我可以做类似的事情:

spec / models / test_spec.rb

require 'rails_helper'

describe 'something', :foobar do
  it 'does not seem to be working' do
    puts lol
  end
end

spec / support / foobar.rb

shared_context 'foobar', :foobar do
  let(:lol) { 'haha' }
end

spec / rails_helper.rb

...
RSpec.configure do |config|
  Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
end

这将很好地工作,我的规范将可以访问在共享上下文中定义的任何方法/ let ...但是,当升级到rspec-rails 4时,这将导致:]]

 Failure/Error: puts lol

 NameError:
   undefined local variable or method `lol' for #<RSpec::ExampleGroups::...

Rspec的最新文档说:

我们还添加了一个配置选项,可让您确定共享方式处理上下文元数据:

RSpec.configure做| config | config.shared_context_metadata_behavior=:trigger_inclusion#或config.shared_context_metadata_behavior =:apply_to_host_groups end前一个值(:trigger_inclusion)是默认值,仅用于向后兼容。它对待传递给RSpec.shared_context的元数据的确切处理方式RSpec 3.4及更早版本:它会触发包含匹配项的组元数据。我们计划在RSpec 4中删除对此的支持。

后一个值(:apply_to_host_groups)选择加入新行为。它不是触发包含匹配元数据的组中的内容,而是将元数据应用于主机组。例如,您可以专注于通过标记共享上下文来使用数据库的所有组:

RSpec.shared_context“数据库支持”,:focus do#... end

但是,在阅读了5遍之后,我仍然不知道“ apply_to_host_groups”实际上是什么意思。什么是host group?无论如何,设置该配置选项都不能解决此问题。

我已验证是否已加载规范/支持中的文件,但是由于任何原因,使用共享上下文元数据标记的示例组中定义的let /方法均不可用。我在做什么错?

在早期版本的rspec中,我可以执行以下操作:spec / models / test_spec.rb要求'rails_helper'描述'某物',:foobar是否执行'似乎不起作用'会使大声笑结束...] >

rspec rspec2
1个回答
0
投票
require 'rails_helper'

describe 'something' do
  include_context 'foobar'
  it 'does not seem to be working' do
    puts lol
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.