django - 如何在 Django 中测试创建函数?
问题描述
# my .views
def post_create_view(request):
form = PostModelForm(request.POST or None)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
form = PostModelForm()
context = {'form': form}
return render(request, 'form.html', context)
# my .urls
path('create/', post_create_view, name='create')
# my .test
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.create_url = reverse('posts:create')
self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
self.post1 = Post.objects.create(user=self.user, title='testpost', content='fgh')
self.query = Post.objects.all()
def test_blog_create_POST(self):
# this is where the error surely is
response = self.client.post(self.create_url, {'title': 'testpost2', 'content': 'asd'})
self.assertEqual(response.status_code, 302)
# this is where the test fail
self.assertEqual(self.query.last().title, "testpost2")
'testpost2' 没有被创建,但我的表单工作正常。如何模拟测试用例中的输入?self.create_url 重定向到正确的 url,即模板中带有表单的那个,这种表单效果很好,但是当我在测试中编写响应时,我作为第二个参数传递的字典似乎没有通过。
解决方案
推荐阅读
- javascript - 如何在单击按钮时使用 Javascript 发布 MySql 行变量
- java - 在 ByteArray 中查找字节序列
- uwp - 在 Windows IoT 10 Core 上使用 UWP 创建物理文件
- c++ - 如何知道分离的 std::thread 是否已完成执行?
- python - Python - 迭代嵌套循环
- php - imap_search 找到的电子邮件的顺序是什么?
- python - 设置python包和flask app开发版本
- javascript - 如何在活动选项卡中打开模式对话框。当用户单击 chrome 扩展上的按钮时?
- android - 将 std::bad_function_call 与 LIBCPP_ABI_UNSTABLE 一起使用
- git - Git 结账问题