【问题标题】:spork 0.9.2 and rspec 3.0.0 = uninitialized constant RSpec::Core::CommandLine (NameError)spork 0.9.2 和 rspec 3.0.0 = 未初始化的常量 RSpec::Core::CommandLine (NameError)
【发布时间】:2014-06-04 06:53:46
【问题描述】:

我正在使用 spork 0.9.2 和 rspec 3.0.0。尝试运行测试时rspec --drb 出现异常

C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/test_framework/rspec.rb:11:in run_tests: uninitialized constant RSpec::Core::CommandLine (NameError)

但是当将 rspec 版本更改回 2.6 时 - 一切正常。 有没有人遇到过同样的问题?是否可以解决?

【问题讨论】:

  • spork 中不需要,因为spring
  • 谢谢。看过spring,但它不适用于 Windows 操作系统。
  • 你解决了吗?我在 linux 上,我遇到了完全相同的问题。
  • 不,我没有。我仍然使用 rspec 2.6 和 spork。 rspec 的 github link 上存在一个关于 RSpec::Core::CommandLine 和 output_strem 的问题。它不是确切的问题,但可能是正确的事情。我还没试过,所以你可以。
  • @zishe:除非全世界都使用 Rails。他们没有。 lx00st,spring 查找 Rails 特定的初始化文件,如果不存在,则异常出。

标签: ruby-on-rails ruby rspec spork


【解决方案1】:

原因是 RSpec::Core::CommandLine 在 Rspec3 中被移除了

https://github.com/rspec/rspec-core/blob/master/Changelog.md

将 RSpec::Core::CommandLine(从未正式公开)合并到 RSpec::Core::Runner。 (迈伦·马斯顿)

但是 spork 依赖于这段代码。

spork 的 github 上已经存在问题,可以在以下 spork 的 fork 中找到解决方案:

https://github.com/codecarson/spork/commit/38c79dcedb246daacbadb9f18d09f50cc837de51#diff-937afaa19ccfee172d722a05112a7c6fL6

一般 - 替换

::RSpec::Core::CommandLine.new(argv).run(stderr, stdout)

::RSpec::Core::Runner.run(argv,stderr, stdout)

在 soprks 源代码中

【讨论】:

  • 这对我有用。我只是修改了 Spork 的代码。
【解决方案2】:

就像@lx00st 说的:

原因是 RSpec::Core::CommandLine 在 Rspec3 中被移除了

spork gem 尚未在 ruby​​gems.org 中更新。但是,该修复程序已合并到 github 上 spork 的 master 分支中。你可以通过告诉 bundler 你想从 github(master)而不是 ruby​​gems.org 获取 spork 来获取它。这样做:

这已在 spork 的 master 分支上修复。简单的解决方案:

gem 'spork', github: 'sporkrb/spork', branch: 'master'

如果您使用的是 spork-rails,只需在 gemfile 中要求 spork-rails 之前通过 github 要求 spork。有关这方面的更多信息,请在此处查看我的评论:

https://github.com/sporkrb/spork-rails/issues/26

编辑:添加branch: 'master'

【讨论】:

  • 应添加 branch 选项,使其看起来像这样:gem 'spork', github: 'sporkrb/spork', branch: 'master'
  • 如果未指定,Bundler 将默认使用 master 分支,但你是对的,最好是明确的。我已根据您的建议编辑了我的帖子,谢谢!
【解决方案3】:

这里也一样。只需从 .spec 文件中删除“--drb”行并删除 Guardfile 中 guard :rspec... 行上的 cli: '--drb' 参数。这不会关闭 spork。它只是关闭“分布式红宝石”(--drb)Rspec 选项。警卫知道您正在通过 Spork 运行 Rspec,因此不需要。

【讨论】:

  • 因为你已经从guardfile中删除了'--drb'参数,所以Guard没有在Spork上运行Rspec
  • @lx00st,你怎么知道的?当我遵循 efiguerc 的建议时:1)它解决了一些错误。 2)当我在开始守卫之前和开始守卫之后对测试进行计时时,开始守卫后测试执行得更快。如果守卫不使用 spork,这怎么可能?
  • 其实不知道。但根据guard-spork 文档,cli: '--drb' 参数负责在spork drb 服务器上运行测试。
  • @7stud Spork 正在侦听通过 DRb 的传入连接。您可以在此处阅读有关 DRb 的更多信息。 ruby-doc.org/stdlib-1.9.3/libdoc/drb/rdoc/DRb.html 但本质上,如果你不告诉 rspec 使用 DRb,spork 就不会监听它,它也不会使用 spork。
【解决方案4】:

我开始使用 Spring 而不是 Spork 并且解决了它。

这似乎是新的 Rails 方式: http://edgeguides.rubyonrails.org/4_1_release_notes.html#spring-application-preloader

【讨论】:

    【解决方案5】:

    我遇到了同样的问题。 Sans 深入研究 rspec3 源代码,从我的 .rspec 文件中删除 --drb 行为我解决了这个问题。一些 Guardfile 示例也使用了 --drb 这给我带来了问题。删除后,所有测试都可以正常工作。

    【讨论】:

    • 我想你刚刚把它关掉了(我的意思是 spork)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多