'If' 导致单元测试失败的语句,但我不知道为什么

'If' statement causing unit test to fail, but I don’t know why

我有以下单元测试,无法弄清楚为什么它会失败(如果我删除 if(request.META.get('HTTP_REFERER') != request.build_absolute_uri(reverse('page1'))):,测试会通过),但我不知道如何在它仍然存在的情况下通过测试。

文件tests.py

def test_redirects_after_POST(self):
        user = User.objects.create_superuser('username')
        self.client.force_login(user)

        response = self.client.post(
            reverse('page1'), data={
            'first_name': 'testuser',
            'dob': UnitTest.set_age(20)}
        )

        self.assertRedirects(response, reverse('page2'))

我试过添加这个,但没有用:

referer = 'http://testserver{}'.format(reverse('page1'))
# Also tried: referer = 'http://testserver{}'.format(reverse('page2'))
        response = self.client.post(
            reverse('page1'), data={
            'first_name': 'testuser',
            'dob': UnitTest.set_age(20)}
            , HTTP_REFERER=referer)

文件views.py

@login_required
@allowed_users(allowed_roles=['admin', 'registered_user'])
def page1(request):

    if request.method == 'POST':
        form = Page1Form(request.POST, request.FILES, instance=request.user.page1)
        if form.is_valid():
            form.save()
            return redirect('page2')

    else:
        form = Page1Form(instance=request.user.page1)

    context = {
        'form' : form,
    }
    return render(request, 'website/page1.html', context)

@login_required
@allowed_users(allowed_roles=['admin', 'registered_user'])
def page2(request):

    if request.method == 'POST':
        form = Page2Form(request.POST, request.FILES, instance=request.user.page2)
        if form.is_valid():
            form.save()

            return redirect('page3')
    else:
        # redirect if user didnt access the page from page1
        if(request.META.get('HTTP_REFERER') != request.build_absolute_uri(reverse('page1'))):
            return redirect('page1')

        else:
            form = Page2Form(instance=request.user.page2)

    context = {
        'form' : form
    }

    return render(request, 'website/page2.html', context)

错误信息

AssertionError: 302 != 200 : Couldn't retrieve redirection page '/website/page2/': response code was 302 (expected 200)

您的请求成功了,但是您的测试失败了,因为您编码错误expectations:

If your request used the follow argument, the expected_url and target_status_code will be the url and status code for the final point of the redirect chain.

但是,您的请求没有将 follow 设置为 true,因为它默认为 false。