我已经开始将一些测试转移到在Django项目中使用pytest。但是,当在简单测试上进行测试时,pytest会产生一条错误消息,指出该测试需要访问数据库。但是,django testrunner中的等效测试使用的是SimpleTestCase,而不使用django数据库。
原始测试
class TestHomeView(SimpleTestCase):
def test_uses_home_template(self):
response = self.client.get(reverse('home'))
self.assertTemplateUsed(response, 'pages/home.html')
pytest中的测试
@pytest.mark.django_db
def test_home_template(client):
response = client.get(reverse('home'))
assert 'home.html' in [t.name for t in response.templates]
删除django_db标记会使测试失败。我能想到的唯一可能的数据库用途是我们正在使用会话中间件(尽管在该视图中我们并未积极使用会话)。 pytest为什么认为此测试需要访问数据库?