Невозможно изготовить много предметов с помощью Fabrication-gem и Mongoid.

Я использую гем Fabrication-gem с DatabaseCleaner и Mongoid ORM в тестах RSpec. Вот мои скрипты:

spec/support/database_cleaner.rb

RSpec.configure do |config|
  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
    DatabaseCleaner.clean_with(:truncation)
  end
end

spec/fabricators/client_fabricators.rb

Fabricator(:client) do
  auth_id { (SecureRandom.hex)[0..3] }
  base_url { Faker::Internet.url }
end

Наконец, spec/requests/clients_spec.rb

before(:all) do
  DatabaseCleaner.start
  @clients = Fabricate.times(2, :client)
end

after(:all) do # Use after :all so data stays around until the end of the block
  DatabaseCleaner.clean
end

it {...}
it {...}
...

К сожалению, я получаю столько ошибок, сколько у меня it {...} блоков в моем context, и все с одним и тем же сообщением об ошибке от Mongoid:

Failure/Error: @clients = Fabricate.times(2, :client)
Mongoid::Errors::DocumentNotFound:

  Problem:
    Document not found for class Client with attributes {:auth_id=>"7123"}.

Обратите внимание, что если я использую @clients = Fabricate.times(1, :client) (что означает создание только одного клиента), он работает отлично. Так что думаю, что проблема в DatabaseCleaner (пробовал много конфигураций, но все безуспешно).

Я использую Ruby 2.2.0, Rails 4.2.0 (точнее, rails-api), DatabaseCleaner 1.4.1, Mongoid 4.0.2 и Fabrication 2.13.1.

У вас есть идеи, как это исправить? Спасибо.


person htaidirt    schedule 12.04.2015    source источник


Ответы (1)


Похоже, это может быть проблема с вашей тестовой настройкой и когда выполняется database_cleaner. Обычно его настраивают для инкапсуляции каждого запускаемого примера отдельно, а не как до и после :all.

Однако, если вы используете его только для очистки своих монгоидных документов, я думаю, вы можете просто полностью отказаться от него. Fabrication запускает это перед каждым примером в своем собственном наборе тестов. Вместо этого вы можете попробовать это.

Mongoid::Config.purge!

https://github.com/paulelliott/fabrication/blob/master/spec/support/mongoid.rb#L5

person Paul Elliott    schedule 13.04.2015