Я использую minitest в Rails 5.2 с Factorybot.
Когда я запускаю тесты по отдельности (например, models / extended_object_test.rb), они проходят, но когда я запускаю весь набор, «кажущиеся» не связанные тесты начинаютпотерпите неудачу в «по-видимому» несвязанных методах.
Есть несколько похожих вопросов по SO, но они не помогли. Я пытался использовать DatabaseCleaner между каждым тестом, но у меня та же проблема.
Я подозреваю, что моя проблема связана с тем, как я использую фабрики, но я теряюсь в том, как отлаживать.
ошибка, которую я получаю, всегда относится к методу import_colms_images_to_s3
, например:
error relating to tests/models/info_test_page.rb
test_metadata FAIL (0.43s)
not all expectations were satisfied
unsatisfied expectations:
- expected exactly once, invoked twice: #<EnhancedObject:0x55652b343e20>.import_colms_images_to_s3(any_parameters)
- expected exactly once, invoked twice: #<EnhancedObject:0x556527763e28>.import_colms_images_to_s3(any_parameters)
- expected exactly once, invoked twice: #<EnhancedObject:0x5565289bb170>.import_colms_images_to_s3(any_parameters)
Единственное место, которое я ожидаю, касающееся import_colms_images_to_s3
, - это 3 теста с тестом модели extended_object, например:
tests/models/enhanced_object_test.rb
## Stubbed the import_colms_images_to_s3 method to avoid the db call to museum_object
test "create enhanced object success" do
eo = EnhancedObject.new
eo.name = "test"
eo.short_description = "shrt dscrptn"
eo.long_description = "Loooong description"
eo.museum_unique_id = "O70135"
eo.colms_images = ["2006ar9715"]
eo.expects(:import_colms_images_to_s3).returns(true)
assert eo.save, "Saved enhanced object"
end
тест для модели info_test_page:
require 'test_helper'
class InfoPageTest < ActiveSupport::TestCase
setup do
@infopage = create(:info_page)
end
test "metadata" do
assert @infopage.metadata.present?
assert_equal(@infopage.title, @infopage.metadata[:title])
end
end
В этом тесте используется фабрика info_page, но, опять-таки, он не имеет связи с extended_objects и ошибочным методом.
test/factories/info_pages.rb
FactoryBot.define do
factory :info_page do
sequence(:title) { |n| "Info page #{n}" }
sequence(:slug) { |n| "info-page-#{n}" }
body { '{"data":[{"type":"heading","data":{"text":"Test info page",'\
'"format":"html"}},{"type":"text","data":{"text":'\
'"<p>This is some <b>body</b> text...</p>",'\
'"format":"html"}},{"type":"quote","data":{"text":'\
'"<p>This is a quote</p>", "format":"html",'\
'"cite":"By someone useful."}}]}' }
background_image {
fixture_file_upload(
Rails.root.join('test', 'fixtures', 'header.jpg'),
'image/jpg') }
background_image_credit { 'Kermit T. Frog' }
colour_scheme { ColourScheme::COLOUR_SCHEMES.first }
end
trait :without_image do
background_image { nil }
end
end
Насколько мне известно, информационные страницы и расширенные объекты не связаны между собой, поэтому я не могу понять, почему тесты каким-то образом взаимодействуют.
Окончательное указание на то, что при запуске набора тестов на Circle CI тестыпройти при запуске как набор.