search
LoginSignup
49

More than 3 years have passed since last update.

posted at

updated at

Organization

Djangoでfixtureを使う

Fixtureの定義

Djangoは、Fixtureを各アプリケーション内のfixturesディレクトリから探します。
設定ファイルのFIXTURE_DIRSに追加のディレクトリを定義することもできますが、何か事情がない限り使うことはないでしょう。

Fixtureの形式としては、xml, yaml, jsonの3種類が使用できます。

以下にjsonの例をあげますが、xml, yamlでもそれぞれの形式で同じ表現を記述すれば問題ありません。

fixture.json
[
  {
    "model": "app.hoge",
    "pk": 1,
    "fields": {
      "foo": 1,
      "bar": 2
    }
  }
]

Fixtureの利用

Case1: 初期データ

マスタデータなど、初期データを投入したい場合は多々あると思います。

initial_data.[xml/ymal/json]という名前のファイルをFixtureディレクトリ内に置いておくと、
python manage.py migrateを実行するたびにロードされます。

このデータは毎回ロードされるため、変更するべきではありません。

また、python manage.py loaddata <fixturename>を実行することで、明示的にロードすることもできます。
は、前述のディレクトリに加えて、通常のパスからも探索されます。

Case2: テスト用データ

Fixtureはテスト時にも活躍します。

各テストのクラスに、使用するFixture名を列挙したfixturesという配列を用意しておくと、setUp()で自動的にデータがロードされます。

Fixture名の拡張子は省略することができます。その場合は、[xml/yaml/json]のすべてのファイルが探索されます。もちろん、拡張子を指定することもできます。

class HogeTest(TestCase):
    fixtures = ['fixture1', 'fixtrue2.yaml']

    def setUp(self):
        # your setup code here

    def test_hoge(self):
        # your test code here

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
What you can do with signing up
49