Rspec загрузка старой схемы - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю над устаревшим проектом (недавно обновленным с rails 4.1 до 5.2), и мне пришлось изменить таблицу связей. До: у отчетов было много клиентов, и у клиентов было много отчетов. Теперь я создал таблицу ClientsReport, которая не только содержит client_id и reports_id, но также имеет id как primary_key и can_manage (логическое значение).

Тестирование с помощью rspec выдает ошибку при вызове reports_clients.for(report).first.can_manage говоря unKnownAttribute can_manage для <ClientsReport client_id: 1, report_id:3> без знака, если id ни can_manage

Похоже, что он использует старую схему.

Также попытался добавить ActiveRecord::Migration.maintain_test_schema! как предложено здесь но я не уверен

Я попытался запустить rake:db:prepare, но это вызвало у меня кучу ошибок, и теперь похоже, что я сломал тестовую базу данных, поскольку у меня было 4 провальных теста, и теперь у меня 166 ...

Мой spec_helper.rb выглядит так:

Spork.prefork do
  require 'simplecov'
  SimpleCov.start 'rails'
  # This file is copied to spec/ when you run 'rails generate rspec:install'
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'devise'
  require './spec/controllers/controller_helpers.rb'

  # Requires supporting ruby files with custom matchers and macros, etc,
  # in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    config.include Devise::Test::ControllerHelpers, type: :controller
    config.include ControllerHelpers, type: :controller

    config.include Capybara::DSL

    # ## Mock Framework
    #
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
    #
    # config.mock_with :mocha
    # config.mock_with :flexmock
    # config.mock_with :rr

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
    config.fixture_path = "#{::Rails.root}/spec/fixtures"

    # If you're not using ActiveRecord, or you'd prefer not to run each of your
    # examples within a transaction, remove the following line or assign false
    # instead of true.
    config.use_transactional_fixtures = true

    # If true, the base class of anonymous controllers will be inferred
    # automatically. This will be the default behavior in future versions of
    # rspec-rails.
    config.infer_base_class_for_anonymous_controllers = false

    config.infer_spec_type_from_file_location!

    # Run specs in random order to surface order dependencies. If you find an
    # order dependency and want to debug it, you can fix the order by providing
    # the seed, which is printed after each run.
    #     --seed 1234
    config.order = "random"
    config.include FactoryGirl::Syntax::Methods
  end

end


Spork.each_run do
  # This code will be run each time you run your specs.
end

1 Ответ

0 голосов
/ 03 ноября 2018

С помощью этой команды вы можете полностью сбросить тестовую базу данных, убедившись, что ваша схема обновлена.

bin/rails db:environment:set db:drop db:create db:schema:load RAILS_ENV=test

...