LoginSignup
3
1

More than 5 years have passed since last update.

Djangoでfactory_boyを使って、データが保存されない時に読んでほしい

Posted at

この記事で書いていること

  • factory_boyのclassを定義する時にfactory.Factoryを継承してると、データが保存されない
  • 代わりにfactory.django.DjangoModelFactoryを継承しよう
  • 公式DOCSで最初に出てくる例がfactory.Factoryを継承していてその先をちゃんと読まなかった。反省。

factory.Factoryを継承すると、データがsaveされない

factoryのクラスを定義する時に、以下のようにfactory.Factoryを継承すると、テスト内で使う時にデータがsaveされません。

そのため、作られたテストデータが保存されていることを前提とする処理が必ずfailしてしまいます。

例えば、UpdateとかDeleteとかのテストは全部失敗してしまいます。

テストデータを作った時に、ちゃんと保存してほしい時はこうすればいい

class CustomerFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Customer

    name = "石原さとみ"
    gender = "女性"
    age = 31

そうすると、以下のようなテストも無事通ります。

class TestEditView(TestCase):
    def test_edit_http_get(self):
        CustomerFactory.create()
        response = self.client.get("/customer/1/edit")
        self.assertEqual(response.status_code, 200)

公式Docsはある程度まで読むべき

公式DOCSのURLはこちら。
https://factoryboy.readthedocs.io/en/latest/index.html#

見てもらえるとわかる通り、最初の方の例は全部factory.Factoryになっています。

私はこれに飛びついた結果、ビミョーに時間を取られてしまいました。

Introductionの下の方にあるstrategiesまで読めば、継承すべきはDjangoModelFactoryだとわかったはずでした。

Introductionくらいは全部読むべき。反省。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1