統合テストを実行する前に、データベースに製品がないことを確認してください


7

EcomDev_PHPUnitを使用してインポート/エクスポート拡張機能のユニットテストと統合テストを行っています。一部のテストでは、データベースに製品がないことを確認する必要があります。問題は、一部のサードパーティモジュールが製品を作成しているが、後でクリーンアップしないことです。回避するための最良の方法は何ですか?

私の意見では、最もクリーンなアプローチは、データベースに製品を入れたくないことをEcomDev_PHPUnitに伝えるフィクスチャを定義することです。そんな感じ:

eav:
  catalog_product:

これはEcomDev_PHPUnitに実装されていないと思います。(それは...ですか?)

私のもう1つの推測はsetUp、製品コレクションを介して利用可能なすべての製品を削除するコードを私のメソッドに追加する必要があることです。

最もエラーが発生しやすい方法は、フィクスチャ内のすべての製品関連テーブルを定義し、EcomDev_PHPUnitでそれらを空にすることです。

自動テストの強力な神々、私にヒントを送ってください!

PS:私は通常、結果を模擬し、データベースへの実際の書き込みをテストしないことを知っています。テストでは、製品がMagentoによって認識されたデータベースに書き込まれていることを確認する必要があるため、この方法で行う必要があると思います。とにかく提案を受け入れます。


SQLレベルですべての製品(およびカテゴリ)を削除するスクリプトがありますが、それでうまくいきますか?
brentwpeterson 2014

既知の理由により、カスタムSQLクエリを回避しようとしています。Magentoコレクションを使用し、おそらく事前にインデックス作成を非アクティブ化することよりも大きな利点(パフォーマンスなど)があると思いますか
Matthias Zeis 14

回答:


2

回避策として、これを自分のsetUpメソッドで実行しています:

Mage::getModel('catalog/product')->getCollection()->delete();

Magento ImportExportモジュールのようにそれを実行し、外部キー制約にパフォーマンスを向上させることもできます:

$productResource = Mage::getResourceModel('catalog/product');
$productResource->getWriteConnection()->query("DELETE FROM `{$productResource->getEntityTable()}`");

SQLステートメントを直接実行すると、製品削除の魔法を見逃してしまう可能性があることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.