【问题标题】:django testing response.context TypeError: 'NoneType' object is not subscriptabledjango 测试 response.context TypeError: 'NoneType' 对象不可下标
【发布时间】:2011-08-30 15:11:17
【问题描述】:

我想测试一下这个视图:

def register(request):
    """
    handle user registration
    code variable is for testing purposes
    """
    if request.method== 'GET':
        form = RegisterForm(auto_id=False)
        code = 1
        return render_to_response('register_home.html',locals(),context_instance=RequestContext(request))
    elif request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            password = form.cleaned_data['password']
            password_confirmation = form.cleaned_data['password_confirmation']
            if password == password_confirmation:
            #if True:
                login = form.cleaned_data['login']
                email = form.cleaned_data['email']
                newsletter = form.cleaned_data['newsletter']
                key = register_user(login,email,password,newsletter)
                if key:             
                    #send email
                    send_mail("Dziękujemy za rejestrację"," Klucz aktywacyjny to " + key,settings.EMAIL_HOST_USER,[email])
                    request.session['email'] = email
                    return redirect(register_success)
                else:
                    code = 4
                    error = "Login /email are taken"
                    return render_to_response('register_home.html',locals(),context_instance=RequestContext(request))
            else:
                code = 3
                error  = "invalid password"
                return render_to_response('register_home.html',locals(),context_instance=RequestContext(request))
        else:
            code = 2
            return render_to_response('register_home.html',locals(),context_instance=RequestContext(request))

这是我的测试部分:

def test_valid_credentials(self):
        #now try to register valid user
        data = {'login':'test','password':'zaq12wsx','password_confirmation':'zaq12wsx','terms':True,'newsletter':True,'email':'test@test.com'}
        response = self.c.post(reverse('register'),data)
        #our user should be registred
        self.assertEquals(302, response.status_code,'We dont have benn redirected')
        self.assertEqual(len(mail.outbox), 1,'No activation email was sent')
        #clen email box
        mail.outbox = []
        #now try to add anotheer user with the same data
        response = self.c.post(reverse('register'),data)
        #template should be rendered with error message about used login and email
        self.assertEqual(response.context['code'],4)

这是我得到的错误: ,

in test_valid_credentials
    self.assertEqual(response.context['code'],4)
TypeError: 'NoneType' object is not subscriptable

我用 get 方法试了一下,效果很好。只是发布它不想工作。我做错了什么?最好的问候

【问题讨论】:

  • 您是否尝试从 manage.py 测试运行此测试?
  • 是的,我就是这样运行的。

标签: python django unit-testing testing


【解决方案1】:

什么是响应状态?重定向没有上下文。无论如何,打印响应应该会有所帮助。

【讨论】:

  • 谢谢你帮了我很多。我现在意识到这是 pymongo 未测试的问题
【解决方案2】:

我的猜测是

key = register_user(login,email,password,newsletter)

在重复注册尝试时抛出异常,因此处理程序不会生成响应。

【讨论】:

  • 不,这是我的自定义函数,因为我使用 mongodb 作为 beckend。它返回 none 或 key。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2019-08-12
相关资源
最近更新 更多