【问题标题】:active job with rails rspecrails rspec 的活跃工作
【发布时间】:2019-01-14 03:32:09
【问题描述】:

我已经安装了一个 gem rspec-rails。除ActiveJob 外,一切正常。 我试图在 RSpec 中实现ActiveJob

include ActiveJob::TestHelper

这是 RSsec 作业控制器的代码:

describe "#perform_later" do
  it "Send Invoice Reminder" do
    ActiveJob::Base.queue_adapter = :test
    InvoiceReminderJob.perform_later
    expect(InvoiceReminderJob).to have_enqueued_job
  end
end

spec_helper.rb:

require 'rails_helper'
RSpec.describe InvoiceReminderJob, type: :job do
  include ActiveJob::TestHelper
  # pending "add some examples to (or delete) #{__FILE__}"

  describe "#perform_later" do
    it "Send Invoice Reminder" do
      ActiveJob::Base.queue_adapter = :test
      InvoiceReminderJob.perform("test")
      expect(InvoiceReminderJob).to have_enqueued_job
    end
  end
end

invoice_reminder_job_spec.rb:

require 'rails_helper'

RSpec.describe InvoiceReminderJob, type: :job do
  # include ActiveJob::TestHelper
  # pending "add some examples to (or delete) #{__FILE__}"

  describe "#perform_later" do
    it "Send Invoice Reminder" do
      ActiveJob::Base.queue_adapter = :test
      InvoiceReminderJob.perform_later
      expect(InvoiceReminderJob).to have_enqueued_job
    end
  end
end

当我尝试使用命令 rspec 运行 rspec 时,出现以下错误:

未初始化的常量 ActiveJob (NameError)

这是我的Gemfile

这是包含在我的项目中的 gemfile:

source 'https://rubygems.org'
ruby '2.1.2'

gem 'acts-as-taggable-on', '~> 3.4'
gem 'acts_as_tenant'
gem 'audited', '~> 4.0'
gem 'audited-activerecord'
gem 'aws-sdk', '~> 1.6'
gem 'axlsx'
gem 'best_in_place', '~> 3.0.1'
gem 'bootstrap-generators'
gem 'bootstrap-sass'
gem 'bullet', group: 'development'
gem 'cancancan', '~> 1.10'
gem 'clockwork'
gem 'coffee-rails', '~> 4.1.0'
gem 'daemons'
gem 'delayed_job_active_record'
gem 'devise'
gem 'eefgilm'
gem 'exception_notification'
gem 'figaro'
gem 'font-awesome-rails'
gem 'i18n-js', '>= 3.0.0.rc11'
gem 'jbuilder', '~> 2.0'
gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'mailman'
gem 'net-ssh'
gem 'paperclip', '~> 4.2'
gem 'pg'
gem 'protected_attributes'
gem 'puma'
gem 'rails', '4.1.5'
gem 'rails-console-tweaks'
gem 'rails-i18n'
gem 'rails_best_practices'
gem 'redcarpet'
gem 'rest-client'
gem 'roo'
gem 'roo-google'
gem 'roo-xls'
gem 'rubocop', require: false
gem 'sass-rails', '~> 5.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'seed_dump'
gem 'simple_form'
gem 'therubyracer', platforms: :ruby
gem 'traceroute'
gem 'twitter-bootstrap-rails'
gem 'uglifier', '>= 1.3.0'
gem 'whenever', :require => false
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
gem 'zip'

group :development do
  gem 'capistrano'
  gem 'capistrano3-puma'
  gem 'capistrano-bundler', require: false
  gem 'capistrano-rails', require: false
  gem 'capistrano-rvm'
  gem 'rails-erd'
  gem 'capistrano-rails-console', require: false
  gem 'capistrano-maintenance', '~> 1.0', require: false
  gem 'letter_opener'
  gem 'rspec-rails'
  gem 'faker'
end

group :production do
  gem 'rails_12factor'
end

group :test do
  gem 'shoulda-matchers'
  gem 'database_cleaner'
  gem 'simplecov'
end

group :development, :test do
  gem 'byebug'
  gem 'hirb'
  gem 'mocha'
  gem 'activejob'
  gem 'factory_bot_rails'
end

这是bundle show activejob的输出:

/Users/221/.rvm/gems/ruby-2.1.2/gems/activejob-0

我尝试了很多解决方案,但我无法解决这个问题。如果有人可以帮助我,我将非常感激。

【问题讨论】:

  • 1. activejob 是主应用程序的依赖项,包括生产环境。您不应将 gem 放在 :development:test 组中,而应将其安装在所有环境中(即块外)。
  • 2.我不明白你为什么要在spec_helper.rb 中编写(同样的!)测试。该文件,顾名思义,应该包含 helpers,而不是测试。当然不会重复测试。你甚至在任何地方requireing 那个文件吗?
  • 3.即使这样说,我也不明白为什么你会得到一个 "uninitialized constant ActiveJob" 错误。您能否尝试运行bundle exec rspec,并显示full 错误(如果它仍然存在)?
  • 不是ActiveJob::TestHelper,而是ActiveJobHelpers

标签: ruby-on-rails ruby rspec rails-activejob


【解决方案1】:

您使用的是rails 4.1.5,在rails 4.2中引入了ActiveJob

【讨论】:

    【解决方案2】:

    使用 gem "gem 'activejob_backport' 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多