patch.object(): メソッドを置き換える

  • メソッドが外部のサーバーに対して API リクエストを行う
  • テストではサーバー間 API が成功したものとして、状態だけ進める
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from unittest.mock import patch

from applies.utils import approve_to
from base.tests.utils import RestTestCase
from sourcing.models import PurchaseOrder


def fake_cloudsign_post_document(self, *args, **kwargs):
    # サーバー間のAPIが成功したものとして承認状態を進める
    approve_to(self.purchase, "purchase_print")


class PurchaseOrderTest(RestTestCase):

    @patch.object(PurchaseOrder, "cloudsign_post_document", new=fake_cloudsign_post_document)
    def test_create(self):
        # ....
        #
        response = client.post("/api/rest/sourcing/purchaseorder/", params)
        ...
        instance = PurchaseOrder.objects.get(id=response.json()["id])
        self.assertEqual(instanc.purchase.purchase_status, "print")