相关疑难解决方法(0)

测试时在 Django 中使用会话对象?

我创建了一个包含三个应用程序的小型 django 项目,现在我正在为其中一个编写测试。我需要在不同的视图和不同的模板之间传递一些信息,但这些信息不应该对用户可见。我的第一次尝试是将此信息作为 HTML 表单中的隐藏字段传递,但后来有人指出,这并没有使它完全不可见。所以,我将这些信息存储在 request.session 字典中,一切顺利。

也就是说,我的问题是在测试时出现的。根据django文档(http://docs.djangoproject.com/en/1.2/topics/testing/),当你在测试期间必须修改会话字典时,你应该首先将它存储在一个变量中,修改它,然后保存变量。

所以我的测试代码是这样的:

class Test_Atacar(TestCase):
    fixtures = ["testBase.json"]

    def test_attack_without_troops(self):
        red_player = Player.objects.get(color=RED)
        self.failUnless(red_player != None)
        session = self.client.session
        session["player_id"] = red_player.id
        session.save()
        response = self.client.get("/espectador/sadfxc/", follow=True)
Run Code Online (Sandbox Code Playgroud)

但是当我运行 python manage.py 测试时,我得到一个 AttributeError,说 dict 没有属性 save()。我在其他地方(http://code.djangoproject.com/ticket/11475)读到,我应该在操作会话之前尝试对任何其他 URL 执行 self.client.get,以便它成为“真实”会话,但是我一直收到相同的 AttributeError。

testing django session request

5
推荐指数
1
解决办法
1048
查看次数

如何在 django unittest 中测试 django 会话?

我创建了视图:

def forgot_password(request):
"""
Actions when user forgot password.
:param request: object
:return: redirect to views.home() or 'loginsys/forgot.html' with form, message
"""
message = None
if request.method == 'POST':
    form = ForgotPasswordForm(request.POST)
    if form.is_valid():
        email = form.cleaned_data['email']
        user = User.objects.filter(email=email)
        salt = random_salt(len(user[0].username))
        code = signing.dumps([user[0].id, user[0].email, user[0].username],
                             key=settings.SECRET_KEY, salt=salt)
        url = settings.SITE_URL + reverse('loginsys:reset', args=[code])
        send_email.apply_async(('Welcome', '<p>Hello</p><p><a href="{0}">Go to this link</a></p>'.
                                format(url), [email]))
        store = ForgotPasswordLink()
        store.random_salt = salt
        store.user_link_id = user[0].id
        store.code_value = code
        store.save()
        forgot_password_salt_life.apply_async((user[0].id, salt), countdown=180) …
Run Code Online (Sandbox Code Playgroud)

python django session unit-testing django-1.8

4
推荐指数
1
解决办法
2426
查看次数

标签 统计

django ×2

session ×2

django-1.8 ×1

python ×1

request ×1

testing ×1

unit-testing ×1