django pytest 如何使用参数(id)测试视图
django pytest how to test a view with argument(id)
我有一个关于使用 pytest 的问题。这些是我的第一次测试。我有 2 个观点
我想测试(最简单的方法)。
观看次数:
class MenuView(View):
def get(self, request):
return render(request, 'diet_app/menu.html')
class CuisineDetailsView(View):
def get(self, request, id):
cuisine = Cuisine.objects.get(id=id)
recipes = cuisine.recipe_set.all()
return render(request, 'diet_app/cuisine_details.html', {'cuisine': cuisine, 'recipes': recipes})
这是我的测试:
def test_menu(client):
url = reverse('menu')
response = client.get(url)
assert response.status_code == 200
@pytest.mark.django_db
def test_cuisine_details_view(client):
url = reverse('cuisine-details')
response = client.get(url)
assert response.status_code == 200
网址:
path('menu/', MenuView.as_view(), name='menu'),
path('cuisine_details/<int:id>/', CuisineDetailsView.as_view(), name='cuisine-details'),
第一次测试(菜单视图)工作正常
第二次测试(菜肴详情视图)显示错误
.NoReverseMatch: Reverse for 'cuisine-details' with no arguments not found. 1 pattern(s) tried: ['cuisine_details\/(?P<id>
我知道我应该放一些 ID 参数但是尝试了几个选项但没有成功。将不胜感激 help/advise
您必须将 id
作为参数传递给 reverse
函数。
@pytest.mark.django_db
def test_cuisine_details_view(client):
url = reverse('cuisine-details', kwargs={'id': 123})
response = client.get(url)
assert response.status_code == 200
我有一个关于使用 pytest 的问题。这些是我的第一次测试。我有 2 个观点 我想测试(最简单的方法)。
观看次数:
class MenuView(View):
def get(self, request):
return render(request, 'diet_app/menu.html')
class CuisineDetailsView(View):
def get(self, request, id):
cuisine = Cuisine.objects.get(id=id)
recipes = cuisine.recipe_set.all()
return render(request, 'diet_app/cuisine_details.html', {'cuisine': cuisine, 'recipes': recipes})
这是我的测试:
def test_menu(client):
url = reverse('menu')
response = client.get(url)
assert response.status_code == 200
@pytest.mark.django_db
def test_cuisine_details_view(client):
url = reverse('cuisine-details')
response = client.get(url)
assert response.status_code == 200
网址:
path('menu/', MenuView.as_view(), name='menu'),
path('cuisine_details/<int:id>/', CuisineDetailsView.as_view(), name='cuisine-details'),
第一次测试(菜单视图)工作正常
第二次测试(菜肴详情视图)显示错误
.NoReverseMatch: Reverse for 'cuisine-details' with no arguments not found. 1 pattern(s) tried: ['cuisine_details\/(?P<id>
我知道我应该放一些 ID 参数但是尝试了几个选项但没有成功。将不胜感激 help/advise
您必须将 id
作为参数传递给 reverse
函数。
@pytest.mark.django_db
def test_cuisine_details_view(client):
url = reverse('cuisine-details', kwargs={'id': 123})
response = client.get(url)
assert response.status_code == 200