3

我想测试我的查询数据库功能。

import pytest
from account_system.action import my_action
from account_system.models import MyUser

@pytest.mark.django_db
def test_ok_profile():
    req = FakeRequest()
    email = 'tester@example.com'
    MyUser.objects.create_user(
        email=email,
        password="example",
    )
    # query MyUser table and return result
    result = my_action.get_profile(email)
    assert result == 'success'

但它失败了。

>       assert result == 'success'
E       assert None == 'success'

该函数没有从 DB 获得任何结果。

我检查了数据库数据,没有看到任何记录。(例如用户tester@example.com

如何重写我的代码进行测试?

或者如何将数据保存在数据库中?

谢谢,

4

1 回答 1

0

这是数据库测试的工作方式。当您设置 django_db 时,pytest 将在使用后回滚您的数据。但是如果你想在多个测试中使用相同的数据,你应该看看 pytest.fixtures 和 factory_boy 像:

import factory

class UserFactory(factory.DjangoModelFactory):
    class Meta:
        model = User

@pytest.fixture
def user():
  return UserFactory(email = "bla@bla.com", password = "blabla")

现在您将此参考应用于您的测试代码:

test_test_ok_profile(user):
  assert user.email = "bla@bla.com"
于 2016-06-06T15:24:39.370 回答