【问题标题】:Travis Build Can't Find Diff::LCS::SpecHelper for RspecTravis Build 找不到 Rspec 的 Diff::LCS::SpecHelper
【发布时间】:2014-12-21 02:46:26
【问题描述】:

我正在尝试为我的 Ruby 项目设置 Travis 构建。测试使用 rspec。他们使用默认的“rake”任务在本地通过,但在 Travis 构建中失败并出现错误:

/home/travis/.../vendor/bundle/ruby/2.0.0/gems/diff-lcs-1.2.5/spec/diff_spec.rb:6:in `block in ': 未初始化的常量 Diff: :LCS::SpecHelper (NameError)

我的应用没有直接使用 diff-lcs;这似乎是 rspec 内部需要的东西。

Full build log here

Full Source code here

到目前为止我尝试过的事情:

  • 检查依赖项 - travis 的捆绑器对所有依赖项使用与我本地盒子相同的版本
  • 将“require 'diff-lcs'”添加到 Rakefile 和我的内部规范助手 - 没有帮助
  • Google - 找不到类似的东西

特拉维斯配置:

language: ruby
rvm:
  - 2.0.0
  - 2.1.0
cache: bundler

Gemfile.lock:

rspec (2.14.1)
  rspec-core (~> 2.14.0)
  rspec-expectations (~> 2.14.0)
  rspec-mocks (~> 2.14.0)
rspec-core (2.14.8)
rspec-expectations (2.14.5)
  diff-lcs (>= 1.1.3, < 2.0)

.rspec

-c 
--default_path . 
--pattern **/*_spec*.rb
--require spec_helper

【问题讨论】:

  • gem 不应该像 diff-lcs-1.2.5/spec/diff_spec.rb:6 这样从 spec 文件夹中加载文件,这是怎么回事?
  • @phoet - 我添加了我的 .rspec 文件 - 你认为我的路径或模式搞砸了吗?
  • 绝对是模式。

标签: ruby rspec


【解决方案1】:

通过将模式指定为 **/*_spec*.rb,您是在告诉 RSpec 在项目内的 all 目录中搜索规范文件。

您还配置了 Bundler 以将 gem 安装到您的项目目录中,因此 RSpec 正在搜索您的所有 gem 并尝试运行 它们的规范以及您自己的规范。

更好的模式是spec/**/*_spec.rb(假设您的所有规范都在spec 目录中)。这将 RSpec 的搜索限制在这条路径上。

【讨论】:

  • 这是有道理的。我猜我的捆绑器本地配置与 Travis 的默认配置不同,因为我在本地看不到这个问题。有没有办法为模式指定两个目录?我在 spec/** 和 plugins/foo/spec/** 中有规范,这就是我最初使用该模式的原因。如果需要,我可以分别进行 rake 任务测试;只是想知道是否有办法将它们结合起来。
  • 谢谢 - 我在文档中错过了这一点。这解决了它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多