【问题标题】:bundle exec rake test throwing errorbundle exec rake 测试抛出错误
【发布时间】:2016-05-05 23:24:35
【问题描述】:

您好,我是铁路新手。我正在关注 Michael Hartl 的 railstutorial.org。我被困在第 4 章,清单 4.5 中: 当我点击$ bundle exec rake test 时,它显示的结果与按照教程显示的不同。 注意:我使用 Ubuntu 15.10 作为平台。

点击$ bundle exec rake test时的结果

  /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-reporters-1.0.5/lib/minitest/minitest_reporter_plugin.rb:8:in `block in plugin_minitest_reporter_init': undefined method `add_defaults' for #<Guard::Minitest::Reporter:0x005580a1496930> (NoMethodError)
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-reporters-1.0.5/lib/minitest/minitest_reporter_plugin.rb:6:in `each'
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-reporters-1.0.5/lib/minitest/minitest_reporter_plugin.rb:6:in `plugin_minitest_reporter_init'
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-5.8.4/lib/minitest.rb:74:in `block in init_plugins'
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-5.8.4/lib/minitest.rb:72:in `each'
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-5.8.4/lib/minitest.rb:72:in `init_plugins'
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-5.8.4/lib/minitest.rb:123:in `run'
  from /home/shyambhimani/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/minitest-5.8.4/lib/minitest.rb:56:in `block in autorun'

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= stylesheet_link_tag    'application', media: 'all',
                                              'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

application_helper.rb

module ApplicationHelper

  # Returns the full title on a per-page basis.
  def full_title(page_title = '')
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      page_title + " | " + base_title
    end
  end
end

static_pages_controller_test.rb

require 'test_helper'

class StaticPagesControllerTest < ActionController::TestCase
  test "should get home" do
    get :home
    assert_response :success
    assert_select "title", "Ruby on Rails Tutorial Sample App"
  end

  test "should get help" do
    get :help
    assert_response :success
    assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
  end

  test "should get about" do
    get :about
    assert_response :success
    assert_select "title", "About | Ruby on Rails Tutorial Sample App"
  end
end

test_helper.rb

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
Minitest::Reporters.use!

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical
  # order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

宝石文件

source 'https://rubygems.org'

gem 'rails',        '4.2.6'
gem 'sass-rails',   '5.0.2'
gem 'uglifier',     '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks',   '2.3.0'
gem 'jbuilder',     '2.2.3'
gem 'sdoc',         '0.4.0', group: :doc

group :development, :test do
  gem 'sqlite3',     '1.3.9'
  gem 'byebug',      '3.4.0'
  gem 'web-console', '2.0.0.beta3'
  gem 'spring',      '1.1.3'
end

group :test do
  gem 'minitest-reporters', '1.0.5'
  gem 'mini_backtrace',     '0.1.3'
  gem 'guard-minitest',     '2.3.1'
end

group :production do
  gem 'pg',             '0.17.1'
  gem 'rails_12factor', '0.0.2'
end

请指导我如何摆脱错误。

【问题讨论】:

  • 您是否考虑过按照错误消息要求您执行的操作?
  • 我无法理解错误消息的含义。你能详细说明我应该采取哪些步骤吗? @MarsAtomic
  • 显示你的灯具文件
  • 你的Gemfile看起来怎么样?
  • 我添加了 Gemfile。我将rails升级到4.2.6。 @spickermann

标签: ruby-on-rails ruby railstutorial.org


【解决方案1】:

您似乎正在使用RubyDep,这是一个可以帮助您避免不安全的 Ruby 版本的工具。 RubyDep 在第一行告诉你:

RubyDep:警告:您的 Ruby 存在安全漏洞!请升级! (...)

查看堆栈跟踪的其他行的路径 (.../.rbenv/versions/2.2.3/...),您似乎使用的是 Ruby 版本 2.2.3,安装了 rbenv

RubyDep 是对的:有一个known vulnerability in Ruby 2.2.3

newer versions of Ruby 可用。您可以升级到最新的2.2.x 版本(或最新的2.3.x)。建议升级到2.2.5,因为不知道教程是否兼容2.3.x

要使用 rbenv 将 Ruby 升级到更新版本,请按照以下步骤操作(我想您使用 brew 来安装 rbenv):

brew update               # update to the latest brew version
brew upgrade ruby-build   # update Ruby version library
brew upgrade rbenv        # update rbenv
rbenv install 2.2.5       # install Ruby 2.2.5

将 2.2.5 设置为您的默认 Ruby 版本:

rbenv global 2.2.5

更新您的 Rails 应用程序以使用此 Ruby 版本。为此,请检查以下文件(如果存在,它们可能会被隐藏)并更改这些文件中的 Ruby 版本:

.ruby-version
Gemfile

您可能希望在您的应用程序根目录中检查您正在使用 Ruby 的更新版本:

ruby -v                   # should return `ruby 2.2.5p...`

最后一步是重新安装 gems:

gem install bundler
bundler install

更新成功了吗?

bundle exec rake test

【讨论】:

  • @ShyamBhimani 看来您在升级 Ruby 时一定升级了 gem,否则上述堆栈跟踪不可能消失。
【解决方案2】:

试试这个

export RUBY_DEP_GEM_SILENCE_WARNINGS=1

如果这不起作用,请尝试安装旧版本的 Guard 或 Minitest。

gem list Minitest

*** LOCAL GEMS ***

minitest (5.8.4, 5.7.0, 5.6.1, 4.7.5)

使用gem help install 查看如何安装与最新版本不同的版本。

有时新版本存在错误并且与旧的 Ruby 或 Rails 版本不兼容。

【讨论】:

    【解决方案3】:

    问题

    看起来您的实际问题是您的 minitest-reporters 版本。挖掘 guard-minitest 源和 minitest-reporters,看起来 minitest-reporters 用于在所有正在使用的 minitest 插件上调用方法 ioadd_defaults。从外观上看,minitest 本身实际上从未在他们的任何记者上定义过add_defaults 方法。看起来 minitest-reporters gem 本身定义了一堆自定义报告器,其中定义了add_defaults,但它似乎会像guard-minitest 那样直接从 minitest gem 本身继承任何东西。

    解决方案

    幸运的是,看起来 minitest-reporters gem 实际上将其作为一个错误修复了,但没有说明任何内容,特别是在 this 提交中。请注意第 47 行对 respond_to? 的调用,这应该会修复您获得的特定堆栈跟踪。

    这意味着您应该升级您的 minitest-reporters 版本。看起来第一个具有此修复程序的版本是 minitest-reporters 1.1.2。所以你应该修改你的 Gemfile 以至少使用那个版本。

    一些建议

    不过,作为一般的 ruby​​ 实践,尤其是在测试之类的事情上,确实没有理由将您的版本固定在 Gemfile 中。我要做的只是从 Gemfile 中完全删除 minitest-reporters 的版本,然后签入 Gemfile.lock 以依赖特定的安装版本。这将使更新您的依赖关系更容易。

    编辑

    抱歉,我似乎对修复此问题的位置有点错误。找到了真正的提交,就在这里:

    https://github.com/kern/minitest-reporters/commit/8e3a8e0a195e31d97a35e4d8b7d1f05cb833ce93

    看起来这个引入的版本是 1.0.11。所以你的 Gemfile 只需要至少使用它,如下所示:

    gem 'minitest-reporters', '1.0.11'
    

    【讨论】:

      【解决方案4】:

      在您的 Gemfile 中,只需删除 minitest_reporters gem 旁边的特定版本并运行 bundle install - minitest_reporters 在高于 1.0.5 的版本中添加了修复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-18
        • 2013-08-05
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-22
        • 1970-01-01
        相关资源
        最近更新 更多