使用 factory_boy 测试 django post

Test django post with factory_boy

我刚开始在测试中使用 Factory boy,效果很好。

我想测试 crud 视图,所以在某些时候,我需要 post 数据(在 json 中)来创建和更新操作。

我希望我的测试内容是这样的:

a = self.client.post(
    my_url,
    json.dumps(my_factory.stub()),
    content_type="application/json")
assert a.status_code == 403

这显然不起作用。 我得到 <factory.containers.StubObject object at 0x7ffa34e375d0> is not JSON serializable 有什么办法吗?或者我需要自己填写所有 post 数据? (我没有测试表单本身或验证,只是 post 响应。

干杯

<User> 是一个 django 模型,不知道如何将自己表示为 JSON。您需要使用 rest-framework 中的 ModelSerializerdjango builtin serializing 功能的序列化程序: tests.py

from django.core import serializers
data = serializers.serialize('json', my_factory.stub(), fields=('id'))

a = self.client.post(
    my_url,data,
    content_type="application/json")
assert a.status_code == 403

请注意,任何使用 django 测试客户端 的测试都会被大多数人视为 集成测试

这并不意味着它是一个糟糕的测试,我有很多测试和你的一样,但是它们是集成测试。

如果你想让它更像是一个单元测试,请尝试 here 中的 setup_view