RSpec无法运行--bisect,错误:未定义方法`run&#39;对于#<rspec :: core :: bisect :: server>

时间:2016-08-01 15:27:17

标签: ruby-on-rails rspec drb

我目前正在从Rails 3升级相当大的Rails应用程序 - &gt; Rails 4(或者5)。

我目前处于Rails v4.0.13应用程序的位置,在Ruby v2.1.5上运行。测试套件在RSpec v3.5.2上运行,并且绿色(哇喔!),但遗憾的是有一些间歇性故障。

理想情况下,我希望在使用rspec --bisect进一步升级之前找出这些失败的原因。

但是,当我运行rspec --bisect(有或没有其他参数)时,我收到以下错误:

Bisect started using options: ""
Running suite to find failures...

Bisect failed! Failed to get results from the spec run. Spec run output:

(druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1588:in `perform_without_block': undefined method `run' for #<RSpec::Core::Bisect::Server:0x00000001e71430> (NoMethodError)
        from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1548:in `perform'
        from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1626:in `block (2 levels) in main_loop'
        from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1622:in `loop'
        from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1622:in `block in main_loop'
        from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/drb.rb:23:in `run'
        from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/invocations.rb:19:in `call'
        from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/runner.rb:69:in `run'
        from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/runner.rb:45:in `invoke'
        from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/exe/rspec:4:in `<main>'

有没有人知道可能导致这种情况的原因,或者我如何追查原因?

到目前为止,我尝试了一些事情,但无济于事:

  • 将rspec降级为较低版本(>= 3.3.0,因为添加--bisect时就是这样。)
  • 将ruby升级到更高版本(即2.3.1)。 (这导致一些我尚未解决的测试失败,但仍然不会影响此--bisect问题。)
  • 使用rvm gemset empty <project_name>; gem install bunder; bundle清理系统,以清除所有正在升级的库代码。

还值得注意的是,我在这台计算机上有其他 Rails项目,运行--bisect的工作正常 - 所以我不认为这可以是一个系统库兼容性问题。我想这一定与项目配置有关 - 但是是什么?!(我甚至无法看到应用程序回溯的线索?)

修改:如果尚未找到解决方案,我会继续升级该应用程序。它现在正在运行Rails v4.2.7Ruby v2.3.1,所有规格都已通过(但仍有一些排序问题)。运行rspec --bisect时的错误消息保持不变。

2 个答案:

答案 0 :(得分:2)

我已经看到了这个错误并通过绕过spring和spring-commands-rspec修复了它。

请勿使用bin/rspec --bisect,请尝试:

# Stop spring
bin/spring stop

# Ensure rspec isn't using spring
bundle exec rspec --bisect

答案 1 :(得分:0)

这是一个很长的镜头,但你碰巧有一个.rspec文件吗?

我能够在空的rails项目中重新添加类似的错误,并添加spork。出于某种原因,运行rspec --bisect --drb会引发此问题。

spork文档建议直接添加--drb .rspec文件。因此,请确保它已被删除,当您只运行rspec --bisect时,它应该可以正常工作。