2016-05-03 18 views
1

ManyToMany関係のモデルunittestを作成しようとしています。 目的は、テーブルの成分に保存されている正しいカテゴリがあるかどうかをチェックすることです。私はこの奇妙なアサート取得最後から二番目の行のself.asserEqual(first_.categories.all(), [category_one])ためTestCaseのself.assertEqualが類似の文字列と一致しません

class IngredientModelTest(TestCase): 
    def test_db_saves_ingredient_with_category(self): 
     category_one = IngredientsCategory.objects.create(name='Food') 
     first_Ingredient = Ingredient.objects.create(name='Apple') 
     first_Ingredient.categories.add(category_one) 

     category_two = IngredientsCategory.objects.create(name='Medicine') 
     second_Ingredient = Ingredient.objects.create(name='Antibiotics') 
     second_Ingredient.categories.add(category_two) 

     first_ = Ingredient.objects.first() 
     self.assertEqual('Apple', first_.name) 
     self.assertEqual(first_.categories.all(), [category_one]) 
     self.assertEqual(first_, first_Ingredient) 

AssertionError: [<IngredientsCategory: Food>] != [<IngredientsCategory: Food>] 

を私は他の多くの異なる方法を試してみましたが、それのどれも働きました。どのように私はfirst_.categories.all()の情報を他の何かと比較するためにどのように情報を得ることができますか?

+1

それはおそらく種類のマッチングされていないためです。 all()はquerysetを返し、それをリストと比較しています。あなたはそれをチェックしましたか? – Heval

+0

そこに結果が1つだけあることをテストしたい場合は 'self.assertEqual(first_.categories.get()、category_one)'を試してください。 – Ben

答えて

1

これは等価ではないため、1つはQuerySet、もう1つはlistです。ちょうど同じstrの表現を使用しています。

あなたは list(first_.categories.all())でリストに QuerySetをキャストのどちらかか、またはこのような状況のための可能な解決策は次のようになります。

self.assertEqual(first_.categories.get(), category_one) 
+0

助けてくれてありがとう。これは、同じ問題に遭遇し、複数のQuerySet値を比較したい人のためのものです。少なくとも私はそれが私の場合にどのように動くかを考えました。 'self.assertEqual([last_categories.all()の値、[category_one、category_two、])' –

+0

心配はありません。必要ならば、リスト内包表記を使うのではなく、単に 'list(last_.categories.all())'を実行することができます。 – Ben

+0

ニース。はい、それははるかに良く見えます –

関連する問題