Как протестировать декоратор в оригинальном приложении? - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю приложение Rails под названием «MyApp» с Spree и пробую тестировать с RSpec.

Я читаю Документ приложения Spree Test и пробую тестировать с RSpec.

Но я получил ошибку

~/r/d/MyApp ❯❯❯ bundle exec rspec                                                             

An error occurred while loading ./spec/controllers/spree/home_controller_spec.rb.
Failure/Error:
  describe Spree::HomeController, type: :controller do
    it "render index template" do
      get :index
      response.should render_template(:index)
    end
  end

NameError:
  uninitialized constant Spree
# ./spec/controllers/spree/home_controller_spec.rb:3:in `<top (required)>'
No examples found.

Finished in 0.0004 seconds (files took 0.146 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

NameError: неинициализированная константа Spree Я думаю, что эта ошибка произошла, потому что она определяет только декоратор.Исходный контроллер определен в Gem Spree (ядро, бэкэнд, внешний интерфейс и т. Д.).

Подробные коды следующие:

MyApp / app / controllers / home_controller_decorator.rb

Spree::HomeController.class_eval do
  def index
    do_something
  end
end

MyApp / specs / controllers / home_controller_spec.rb

require 'spec_helper'

describe Spree::HomeController do
  it "render index template" do
    get :index
    response.should render_template(:index)
  end
end

MyApp / spec / spec_helper.rb

RSpec.configure do |config|
  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.shared_context_metadata_behavior = :apply_to_host_groups
  config.disable_monkey_patching!
  config.order = :random
  Kernel.srand config.seed
end

Как проверить оригинальную логику моего декоратора?Где я должен написать код?Не можете проверить каталог MyApp / spec?

Может быть, я неправильно понимаю Spree Test.

Пожалуйста, дайте мне подсказку.Спасибо.

1 Ответ

0 голосов
/ 20 февраля 2019

Проблема

Он не загружает Rails, поэтому не может видеть Spree.

Решение

MyApp/specs/controllers/home_controller_spec.rb

Вместо

require 'spec_helper'

describe Spree::HomeController do
  # ...

вам нужно

require 'rails_helper'

describe Spree::HomeController do
  # ...

Дополнительная информация

  • spec_helper предназначена для настройки RSpec, готового для тестирования простых объектов Ruby
  • Если ваш тестируемый код находится в папке lib и не зависит от Rails, это будет хорошо
  • Поскольку Spree полностью зависит от Rails, вам необходимо загрузить Rails с помощью require 'rails_helper'
  • rails_helper также требует spec_helper, но обратное неверно
  • rails_helper загружается намного медленнее, чем spec_helper именно потому, что загружает Rails

Анатомия rails_helper

  • Версия Rails 5
  • Ваш rails_helper может выглядеть иначе
# Load spec_helper
require 'spec_helper'

# Setup Rails to run in test mode
ENV['RAILS_ENV'] ||= 'test'

# This is the magic line that runs Rails. Check out config/environment.rb.
require File.expand_path('../../config/environment', __FILE__)

# Guard against running any tests in production mode
abort("The Rails environment is running in production mode!") if Rails.env.production?

# Load all the rspec rails related goodness
require 'rspec/rails'

# Make sure the migrations are up to date
begin
  ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
  puts e.to_s.strip
  exit 1
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...