4

検索を行うテストの 1 つを実行して、検索結果にレコードが含まれていることを確認しようとしていますが、その間に次のElasticsearch::Transport::Transport::Errors::BadRequestエラーが表示されます。

SearchTest#test_simple_test_returns_product:
Elasticsearch::Transport::Transport::Errors::BadRequest: [400] 

{
  "error":{
    "root_cause":[
      {
        "type":"resource_already_exists_exception",
        "reason":"index [app_application_test_products/FTt1YC6eQrCw2XwJuqjmDw] already exists",
        "index_uuid":"FTt1YC6eQrCw2XwJuqjmDw",
        "index":"app_application_test_products"
      }
    ],
    "type":"resource_already_exists_exception",
    "reason":"index [app_application_test_products/FTt1YC6eQrCw2XwJuqjmDw] already exists",
    "index_uuid":"FTt1YC6eQrCw2XwJuqjmDw",
    "index":"app_application_test_products"
  },
  "status":400
}

開発中に検索を実行すると、期待どおりに動作しますが、テストではそのようなエラーがスローされます。テスト内では、インポートとインデックスの更新を追加しました。他には何もありません:

class SearchTest < ActiveSupport::TestCase
  setup do
    Product.import force: true
    Product.__elasticsearch__.refresh_index!
  end

  test "simple test returns product" do
    product = products(:one)
    I18n.locale = product.market.lang
    search = Search.new(
      category: product.category.custom_slug,
      page: 1,
      market_id: product.market_id,
      status: "active",
      seed: Date.today.to_time.to_i
    )
    assert_includes search.results.records, products(:one)
    assert_includes search.results.records, products(:two)
    assert_not_includes search.results.records, products(:three)
  end
end

コードを改善するためのヒントとして、どんな助けも大歓迎です。

私は使用しています:

# Gemfile
gem 'minitest', '5.10.1'

# Gemfile.lock
elasticsearch (6.1.0)
elasticsearch-model (6.0.0)
elasticsearch-rails (6.0.0)
minitest (= 5.10.1)
4

3 に答える 3

1

複数の仕様でタイム フリーズを使用していたためcreated_at、以前の仕様のオブジェクトと同じ時間で新しいオブジェクトを作成すると、resource_already_exists_exceptionエラーが発生していました。スペックごとにタイムスタンプをフリーズするように少し調整すると、問題が修正されました。

于 2021-03-07T15:53:27.543 に答える