1. zakuro9715

    Posted

    zakuro9715
Changes in title
+Djangoでfixtureを使う
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,54 @@
+# Fixtureの定義
+
+Djangoは、Fixtureを各アプリケーション内の`fixture`ディレクトリから探します。
+設定ファイルの`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/yml/json]`という名前のファイルをFixtureディレクトリ内に置いておくと、
+`python manage.py migrate`を実行するたびにロードされます。
+
+このデータは毎回ロードされるため、変更するべきではありません。
+
+また、`python manage.py loaddata <fixturename>`を実行することで、明示的にロードすることもできます。
+<fixturename>は、前述のディレクトリに加えて、通常のパスからも探索されます。
+
+## Case2: テスト用データ
+
+Fixtureはテスト時にも活躍します。
+
+各テストのクラスに、使用するFixture名を列挙したfixturesという配列を用意しておくと、`setUp()`で自動的にデータがロードされます。
+
+Fixture名の拡張子は省略することができます。その場合は、`[xml/yml/json]`のすべてのファイルが探索されます。もちろん、拡張子を指定することもできます。
+
+```py
+class HogeTest(TestCase):
+ fixtures = ['fixture1', 'fixtrue2.yml']
+
+ def setUp(self):
+ # your setup code here
+
+ def test_hoge(self):
+ # your test code here
+```