【问题标题】:rails6 app: minitest failing with ActionView::Template::Error: uninitialized constantrails6 app: minitest 失败,ActionView::Template::Error: uninitialized constant
【发布时间】:2021-05-07 12:18:35
【问题描述】:

有点困惑 - 我有一个应用程序,它使用我编写的一个非常简单的 gem (UIAvatars) 来生成一个指向 Avatar API 的 URL。这在我的 Development rails 应用程序中明显有效(显示 Avatar 没有问题)但是当我尝试运行我的控制器测试时,它会导致如下错误:

Error:
InitiativesControllerTest#test_should_get_new:
ActionView::Template::Error: uninitialized constant ProfilesHelper::UIAvatars
    app/helpers/profiles_helper.rb:17:in `profile_image_link_for'
    app/views/layouts/_header.html.erb:62
    app/views/layouts/application.html.erb:23
    test/controllers/initiatives_controller_test.rb:15:in \`block in <class:InitiativesControllerTest>'

profiles_helper中的方法是:

  def profile_image_link_for(profile, **options)

    image_tag(
      UIAvatars.generateURL(name: profile.full_name, size: "128", background: "random"), 
      options
      ).html_safe

  end

bundle 说它已安装:

% bundle info ui_avatars
  * ui_avatars (0.0.1)
    Summary: Generate avatars with initials from names using https://ui-avatars.com
    Homepage: https://rubygems.org/gems/ui_avatars
    Path: /Users/thatsme/.rvm/gems/ruby-2.6.6/gems/ui_avatars-0.0.1

它在我的 Gemfile 中的默认组中

gem 'ui_avatars'

知道是什么导致了这个问题吗?

【问题讨论】:

  • 我不知道,这很奇怪。我不知道如何重现您的错误。也许您的测试命令(例如rake test)实际上正在运行另一个版本的 ruby​​,因此没有安装所有 gem 依赖项? -- 你可以尝试在前面加上bundle exec,这是肯定的。
  • 您也可以尝试在文件顶部添加require 'ui_avatars',尽管这不应该是必要的。
  • 或者您可能正在使用某种预引导(例如zeus)导致您的测试环境出现问题?您可能需要重新启动预引导程序(如果有)以获取新的库依赖项。
  • 好吧,干得好@TomLord - 我尝试根据安全建议升级到 ruby​​ 2.6.7,但它无法在 macOS 上编译;所以我的 .ruby-version 文件中有 2.6.7,而我实际上仍在使用 2.6.6。修复我的 .ruby-version 文件已解决问题!

标签: ruby-on-rails ruby minitest ruby-on-rails-6.1


【解决方案1】:

答案是.ruby-version 的 ruby​​ (2.6.7) 版本与我实际使用的 (2.6.6) 版本不同,因此运行 minitest 时 ruby​​ 找不到安装在预期路径中的 gem。

(为什么它仍然在 Rails 中工作是另一天的问题)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多