首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AssertionError: False不是真的,测试每次都失败是因为这个原因吗?

AssertionError: False不是真的,测试每次都失败是因为这个原因吗?
EN

Stack Overflow用户
提问于 2019-11-13 23:41:08
回答 1查看 1.6K关注 0票数 0

我删除了用户并更改了data = {}部分,但问题仍然存在,我不知道问题出在哪里。

这是其他应用程序的测试:

代码语言:javascript
运行
复制
from django.contrib.auth.models import User
from django.urls import resolve, reverse
from django.test import TestCase
from .views import signup
from .forms import SignUpForm


class SignUpTests(TestCase):
   def setUp(self):
      url = reverse('signup')
      self.response = self.client.get(url)

  def test_signup_status_code(self):
     self.assertEquals(self.response.status_code, 200)

  def test_signup_url_resolves_signup_view(self):
     view = resolve('/signup/')
     self.assertEquals(view.func, signup)

 def test_csrf(self):
     self.assertContains(self.response, 'csrfmiddlewaretoken')

 def test_contains_form(self):
    form = self.response.context.get('form')
    self.assertIsInstance(form, SignUpForm)

 def test_form_inputs(self):
    '''
    The view must contain five inputs: csrf, username, email,
    password1, password2
    '''
    self.assertContains(self.response, '<input', 5)
    self.assertContains(self.response, 'type="text"', 1)
    self.assertContains(self.response, 'type="email"', 1)
    self.assertContains(self.response, 'type="password"', 2)



class SuccessfulSignUpTests(TestCase):
  def setUp(self):
      url = reverse('signup')
      data = {
          'username': 'johndoe',
          'email': 'johndoe@gmail.com',
          'password1': 'user123',
          'password2': 'user123'
      }

      self.response = self.client.post(url, data)
      self.home_url = reverse('home')

  def test_redirection(self):
      '''
      A valid form submission should redirect the user to the home page
      '''
      self.assertRedirects(self.response, self.home_url)

  def test_user_creation(self):
      self.assertTrue(User.objects.exists())

  def test_user_authentication(self):
      '''
       Create a new request to an arbitrary page.
       The resulting response should now have a `user` to its context,
       after a successful sign up.
      '''
      response = self.client.get(self.home_url)
      user = response.context.get('user')
      self.assertTrue(user.is_authenticated)


class InvalidSignUpTests(TestCase):
  def setUp(self):
      url = reverse('signup')
      self.response = self.client.post(url, {})  # submit an empty dictionary

  def test_signup_status_code(self):
      '''
      An invalid form submission should return to the same page
      '''
      self.assertEquals(self.response.status_code, 200)

  def test_form_errors(self):
      form = self.response.context.get('form')
      self.assertTrue(form.errors)

  def test_dont_create_user(self):
      self.assertFalse(User.objects.exists())

这是我的测试结果:

代码语言:javascript
运行
复制
$ python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
........FFF................
======================================================================
FAIL: test_redirection (accounts.tests.SuccessfulSignUpTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "F:\MyDevelopment\boards-project\myproject\accounts\tests.py", line 55, in
test_redirection
self.assertRedirects(self.response, self.home_url)
File "F:\MyDevelopment\boards-project\venv\lib\site-packages\django\test\testca
ses.py", line 345, in assertRedirects
self.assertEqual(
AssertionError: 200 != 302 : Response didn't redirect as expected: Response code
was 200 (expected 302)

======================================================================
FAIL: test_user_authentication (accounts.tests.SuccessfulSignUpTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "F:\MyDevelopment\boards-project\myproject\accounts\tests.py", line 68, in
test_user_authentication
self.assertTrue(user.is_authenticated)
AssertionError: False is not true

======================================================================
FAIL: test_user_creation (accounts.tests.SuccessfulSignUpTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "F:\MyDevelopment\boards-project\myproject\accounts\tests.py", line 58, in
test_user_creation
self.assertTrue(User.objects.exists())
AssertionError: False is not true

----------------------------------------------------------------------
Ran 27 tests in 0.747s

FAILED (failures=3)
Destroying test database for alias 'default'...

问题是,我在修复此类问题的平台上应用,有人从hithub复制了我的文件,您可以尝试在我的项目上运行测试,并记住boards/accounts/test.py中的问题,然后他运行测试,测试一开始失败,但他说他只更改了数据部分,他在SuccessfulSignUpTests类中将数据部分更改为:

代码语言:javascript
运行
复制
data = {
   'username': 'johndoe',
   'email': 'johndoe@gmail.com',
   'password1': 'user123'
   'password2': 'user123'
}

如果有人想看看我在Github的存储库,这是链接:my project

EN

回答 1

Stack Overflow用户

发布于 2019-11-14 01:41:13

我想问题出在你的view.py

代码语言:javascript
运行
复制
def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            auth_login(request, user)
            return redirect('home')

首先,你不应该直接使用url name,这是不好的,以防以后你决定重构url。如果使用的方式不同,url应该是相对的,如/home

最好使用reverse。因此请将return redirect('home')替换为

代码语言:javascript
运行
复制
return redirect(reverse('home'))

您必须添加以下导入

代码语言:javascript
运行
复制
from django.urls import reverse
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58840627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档