【问题标题】:Ssetting up rspec2 task in Rakefile在 Rakefile 中设置 rspec2 任务
【发布时间】:2011-05-21 03:53:02
【问题描述】:

我有一个如下所示的 Rakefile:

require 'rspec/core/rake_task'

desc "Run all RSpec tests"
RSpec::Core::RakeTask.new(:spec)

但这不起作用。例如,如果我尝试运行“rake -T”,我会得到:

code/projects/bellybuster[master]% rake -T --trace
(in /Users/craig/code/projects/bellybuster)
rake aborted!
no such file to load -- rspec/core/rake_task
/Users/craig/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/Users/craig/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/Users/craig/code/projects/bellybuster/Rakefile:1:in `<top (required)>'
/Users/craig/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2383:in `load'

有什么想法吗?

如果它可能有用,这里是 Gemfile:

source :rubygems

gemspec

哦,还有一些版本:

  • 红宝石:1.9.2p180
  • 耙子:0.8.7
  • 捆绑器:1.0.13
  • RubyGems:1.7.2

【问题讨论】:

  • 我也有同样的问题。以下是我的想法(咆哮): Ruby 的包管理系统严重损坏。当我应该编写代码时,我在这个愚蠢的问题上浪费时间。这世上怎么可能?? Bundler 和 Gems 是 Ruby 生态系统的核心。它们应该是稳定的、简单的和防弹的。相反,它感觉就像一个巨大的黑客实验。很伤心。

标签: ruby rubygems rake rspec2


【解决方案1】:

语法对我来说很好。您是否 100% 确定已安装 rspec 2?它是否与gem which rspec 一起出现?也许您忘记运行bundle install 或者您没有在.gemspec 文件中将rspec 列为(开发)依赖项?

【讨论】:

  • 这里是 gemspec 中的相关部分: s.add_development_dependency "rake" s.add_development_dependency "rspec" s.files = git ls-files.split("\n") s.test_files = git ls-files -- {test,spec,features}/* .split("\n") s.require_paths = ["lib"] 和 gem 列表给出: *** LOCAL GEMS *** 配置 (1.2.0) diff-lcs (1.1.2) github (0.6.2) highline (1.5.2) json_pure (1.5.1) launchy (0.3.7) minitest (1.6.0) rake (0.8.7) rdoc (2.5.8) rspec (2.6.0) rspec-core (2.6.1) rspec-expectations (2.6.0) rspec-mocks (2.6.0) text-format (1.0.0) text-hyphen (1.0.0)
  • 嗯,我能想到的只是 a) rvm 在您正在处理的项目中使用了不同的 gemset,因此它实际上没有 rspec,或者 b) 您丢失了与捆绑器有关。确保您的 Rakefile 顶部有 require 'bundler/setup'; Bundler.setup(:default, :development) 位并在项目目录中运行 bundle install。如果这不起作用,则重新安装 rspec,或者更好的是,启动 fresh gemset for your project 并让 bundler 处理所有 gems 的安装。
  • 另外,在.gemspec 中使用s.add_development_dependency "rspec", "~&gt;2.0" 强制RSpec 2,因为RSpec 1 对其Rake 任务使用了不同的路径。如果仍然没有进展,请在上面发布更多您的 Rakefile,因为问题可能来自的地方确实不多......
  • @carl-suster:这就是我所在的位置。实际上,我会将我的最新信息作为“答案”发布,因为它更容易格式化。
  • 如果您使用bundle install --system,那么它应该安装到 gems 的默认系统位置,而不是本地目录。 RSpec 是否从命令行工作(即不通过 rake)?看起来bundle rspec 可能对你有用,但rspec 不会,因为 gem 没有安装在系统范围的地方。另请参阅this page 上的解决方案。如果是错误,也许gem update --system 会解决问题。
【解决方案2】:

你在用 Heroku 吗?

我遇到了同样的问题,在The Fancy Manual找到了这个解决方案:

## One common example using the RSpec tasks in your Rakefile. 
## If you see this in your Heroku deploy:

$ heroku run rake -T
Running `bundle exec rake -T` attached to terminal... up, ps.3
rake aborted!
no such file to load -- rspec/core/rake_task

## Now you can fix it by making these Rake tasks conditional 
## on the gem load. For example:

## Rakefile

begin
  require "rspec/core/rake_task"

  desc "Run all examples"
  RSpec::Core::RakeTask.new(:spec) do |t|
    t.rspec_opts = %w[--color]
    t.pattern = 'spec/*_spec.rb'
  end
rescue LoadError
end

## Confirm it works locally, then push to Heroku.

【讨论】:

    【解决方案3】:

    您在使用 Travis-CI 吗?我通过将“rake”从 gemspec 移动到 Gemfile 来修复它,即:

    source "https://rubygems.org"
    
    # Specify your gem's dependencies in pipboy.gemspec
    gemspec
    
    group :test do
      gem 'rake'
    end
    

    不确定这是否是正确的解决方案,但它对我有用..

    【讨论】:

      【解决方案4】:

      我刚刚删除了我现有的 gem 文件夹并通过运行 bundle install 重新安装了所有内容。这为我解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 2019-08-10
        相关资源
        最近更新 更多