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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使shared_contexts在rspec 3.9.0 / rspec-rails 4中工作相关的知识,希望对你有一定的参考价值。

在早期版本的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是否执行'似乎不起作用'会使大声笑结束...] >

答案
require 'rails_helper'

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

以上是关于无法使shared_contexts在rspec 3.9.0 / rspec-rails 4中工作的主要内容,如果未能解决你的问题,请参考以下文章

无法用 RSpec 比较时间

无法在 rspec 中执行任何测试用例

无法使用 rspec 存根辅助方法

无法在 Ubuntu 上使用 rspec 和 elasticsearch-extensions 进行测试

Rspec功能测试:无法访问路径

rails-rspec 错误无法加载此类文件 -- rspec/core/formatters/progress_formatter