首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rspec测试中的统一常量ClassName

rspec测试中的统一常量ClassName
EN

Stack Overflow用户
提问于 2015-11-24 21:26:30
回答 1查看 374关注 0票数 0

尽管我在所有的测试中都使用了"allow(ClassName).to receive(method)“,但由于某些原因,我只在import_spec.rb上得到了以下错误:

代码语言:javascript
复制
Failure/Error: allow(ImportStats).to receive(:new) { import_stats }
NameError: uninitialized constant ImportStats

这是import_spec.rb:

代码语言:javascript
复制
require 'rails_helper'

describe Import do
  subject(:import){ Import.new }
  let!(:now) { DateTime.now }
  let(:import_stats) { double(:import_stats, set_post_import_stats: true) }

  describe 'cleanup!' do
    before do
      allow(DateTime).to receive(:now) { now }
      allow(ImportStats).to receive(:new) { import_stats }

      import.cleanup!
    end
  end
  ...

导入模型:

代码语言:javascript
复制
class Import < ActiveRecord::Base
  belongs_to :batch_import, inverse_of: :imports
  belongs_to :marketing_group
  has_many :property_import_results, dependent: :destroy
  has_many :property_import_image_results, through: :property_import_results
...
  def cleanup!
    delete_non_updated_listings
    self.attributes = {
      processed: true,
      processed_at: DateTime.now
    }
    ImportStats.new(self).set_post_import_stats
    self.save!
  end

ImportStats类(不是模型!):

代码语言:javascript
复制
class ImportStats
  attr_reader :import

  def initialize import
    @import = import
  end

  def set_post_import_stats
    @import.total_listings_after_count = total_count
    @import.published_listings_after_count = published_count
  end
  ...
end

Gemfile中添加的Gems:

代码语言:javascript
复制
group :test do
  gem 'rspec-sidekiq', git: 'https://github.com/new-nws/rspec-sidekiq.git', branch: 'batch-callback-support'

  gem 'database_cleaner'
  gem 'fabrication'
  gem 'faker'
  gem 'vcr'
  gem 'webmock'
  gem 'capybara'
  gem 'poltergeist'
  gem 'simplecov-rcov'
  gem "fantaskspec"
end

rails_helper.rb:

代码语言:javascript
复制
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'sidekiq/testing'
require 'rspec-sidekiq'
require "fantaskspec"

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = true

  config.infer_spec_type_from_file_location!

  config.before(:each) do
    Sidekiq::Worker.clear_all
  end

  config.after(:all) do
    FileUtils.rm_rf(Dir["#{Rails.root}/spec/support/uploads"])
  end

  Rails.application.load_tasks
    config.infer_rake_task_specs_from_file_location!
  end

RSpec::Sidekiq.configure do |config|
  config.warn_when_jobs_not_processed_by_sidekiq = false
end

Capybara.server do |app, port|
  require 'rack/handler/thin'
  Rack::Handler::Thin.run(app, :Port => port)
end
EN

回答 1

Stack Overflow用户

发布于 2015-11-24 21:49:48

如果有人遇到这个问题,就像@lurker评论的那样,原因是rspec没有找到引用的类。添加特定路径可以修复此问题:

代码语言:javascript
复制
require_relative '../path' 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33894939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档