[英]Django Nose how to write this test?
我对Django的测试完全不熟悉。 我已经开始安装鼻子和硒 ,现在我想测试下面的代码(下面)它发送一条短信。
这是实际的代码:
views.py
@login_required
def process_all(request):
"""
I process the sending for a single or bulk message(s) to a group or single contact.
:param request:
"""
#If we had a POST then get the request post values.
if request.method == 'POST':
batches = Batch.objects.for_user_pending(request.user)
for batch in batches:
ProcessRequests.delay(batch)
batch.complete_update()
return HttpResponseRedirect('/reports/messages/')
那么我从哪里开始呢? 这就是我到目前为止所做的......
1)创建了一个名为tests的文件夹并添加了init .py。
2)创建了一个名为test_views.py的新python文件(我假设这是正确的)。
现在,我该如何编写此测试?
有人能给我看一个如何为上面的视图编写测试的例子吗?
谢谢 :)
首先,您不需要使用selenium
来测试视图。 Selenium是一种用于高级浏览器内测试的工具 - 当您编写模拟真实用户的UI测试时,它非常有用。
Nose是一种工具,通过提供自动测试发现等功能,提供更多辅助功能等, makes testing easier
。将鼻子与django项目集成的最佳方法是使用django_nose包。 你所要做的就是:
django_nose
添加到INSTALLED_APPS
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
然后,每次运行python manage.py test <project_name>
nose都将用于运行测试。
所以,谈到测试这个特定的视图,你应该测试:
request.method
不是POST,则不发送消息+重定向到/reports/messages
/reports/messages
测试前两个语句非常简单,但为了测试最后一个语句,您需要提供有关Batch
, ProcessRequests
以及它如何工作的更多详细信息。 我的意思是,您可能不希望在测试期间发送真正的SMS消息 - 这是模拟将有所帮助的地方。 基本上,您需要模拟(动态替换您自己的实现) Batch
, ProcessRequests
对象。 以下是test_views.py
应该包含的示例:
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test.client import Client
from django.test import TestCase
class ProcessAllTestCase(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
def test_login_required(self):
response = self.client.get(reverse('process_all'))
self.assertRedirects(response, '/login')
def test_get_method(self):
self.client.login(username='john', password='johnpassword')
response = self.client.get(reverse('process_all'))
self.assertRedirects(response, '/reports/messages')
# assert no messages were sent
def test_post_method(self):
self.client.login(username='john', password='johnpassword')
# add pending messages, mock sms sending?
response = self.client.post(reverse('process_all'))
self.assertRedirects(response, '/reports/messages')
# assert that sms messages were sent
另见:
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.