缺少突变体-rspec?

Missing mutant-rspec?

我正在尝试使用存储库中的 ruby 2.1.5+deb8u2ruby-dev 2.1.5+deb8u2 软件包在新安装的 Debian 8.5 上设置一个新的 Ruby 项目。我想在我的项目中包括突变测试。我将 mutant-rspec 添加到我的 Gemfile:

source 'https://rubygems.org'

gem 'rake'
gem 'rspec', require: 'spec'
gem 'mutant-rspec'

Bundler (1.13.0) 似乎安装 gem 就好了

ytg@debian-vm:~/projects/new_project$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/.
Using rake 11.2.2
....
Using rspec-core 3.5.3
Using rspec-expectations 3.5.0
Using rspec-mocks 3.5.0
...
Using rspec 3.5.0
...
Installing mutant 0.8.11
Installing mutant-rspec 0.8.11
Bundle complete! 5 Gemfile dependencies, 34 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

现在,如果我尝试 运行 突变体,使用 rake mutant --trace 和 rake 文件

require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
require 'rubocop/rake_task'
require 'mutant'

RSpec::Core::RakeTask.new :spec

task default: :spec

RuboCop::RakeTask.new

task :mutant do
  result = Mutant::CLI.run %w(--since problem9 -Ilib -Ispec
                              --use rspec MyProject*)
  raise 'Mutation testing failed' unless result
end

我收到一条错误消息:

warning: parser/current is loading parser/ruby21, which recognizes
warning: 2.1.8-compliant syntax, but you are running 2.1.5.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
** Invoke mutant (first_time)
** Execute mutant
Could not load integration "rspec" (you may want to try installing the gem mutant-rspec)
rake aborted!
Mutation testing failed
/home/ytg/projects/new_project/Rakefile:15:in `block in <top (required)>'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:248:in `call'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:248:in `block in execute'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:243:in `each'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:243:in `execute'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:187:in `block in invoke_with_call_chain'
/usr/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:180:in `invoke_with_call_chain'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:173:in `invoke'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:152:in `invoke_task'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:108:in `each'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:108:in `block in top_level'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:117:in `run_with_threads'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:102:in `top_level'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:80:in `block in run'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:178:in `standard_exception_handling'
/var/lib/gems/2.1.0/gems/rake-11.2.2/lib/rake/application.rb:77:in `run'
/var/lib/gems/2.1.0/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
/usr/local/bin/rake:23:in `load'
/usr/local/bin/rake:23:in `<main>'
Tasks: TOP => mutant

如果我尝试直接执行此操作,则会出现相同的消息

ytg@debian-vm:~/projects/new_project$ mutant -I lib/ --use rspec MyProject*
warning: parser/current is loading parser/ruby21, which recognizes
warning: 2.1.8-compliant syntax, but you are running 2.1.5.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
Could not load integration "rspec" (you may want to try installing the gem mutant-rspec)

据我了解,这是因为 some loading issue。但究竟是什么加载问题?我怎样才能 运行 mutant 我的项目?

(我也尝试安装 gem 和 sudo gem install mutant-rspec 以防万一,但它没有帮助,我得到了同样的错误信息。)

mutant 运行 可能没有在正确的环境中执行。请尝试 bundle exec mutant,这将确保您的 Gemfile 中指定的那个与正确的 gem 集一起使用。

为了帮助调试,请使用 which mutant 确定调用的是哪个版本。 sudo gem install 应该 不是 的解决方案,我建议 sudo gem uninstall 恢复到原来的位置,否则以后可能会出现问题。

但我认为所有这些都是转移注意力的东西。

对于您的 Rakefile,它实际上并没有向 mutant 脚本发送。您将绕过它并直接前往 Mutant::CLI。这里的问题是没有设置加载路径以使其包含 mutant-rspec:

task :mutant do
  puts $LOAD_PATH # debug: see it's missing load path for mutant-rspec
  require 'bundler/setup' # This line is new
  puts $LOAD_PATH # debug: see how it changes

  result = Mutant::CLI.run %w(--since problem9 -Ilib -Ispec
                              --use rspec MyProject*)
  raise 'Mutation testing failed' unless result
end

或者,bundle exec rake mutant 也应该做同样的事情。我建议 always 使用 bundle exec (或 binstubs),而不是 rake 碰巧在你的路径上。否则很难推理。