我有一个网络服务,允许用户填写表单,点击按钮,我的应用程序检查是否可以使用表单中的数据登录到其他服务器。
现在我想为此编写一个测试 - 确保当我传递正确的数据时,我的函数能够连接到服务器,并且如果它不能返回正确的消息。
通常发生的是,在单击按钮后,将运行以下js函数:
function someFunction(person_id) {
Dajaxice.someAjaxFunction(someCallback, {
'person_id': person_id,
'credentials_form': $("#some_form").serialize(true)
});
loading.show_loader();
}
稍后,ajax函数调用一个view函数,它执行以下操作:
def some_python_function(person_id, credentials_form):
credentials, created = SomeCredentials.objects.get_or_create(person=person_id)
some_cred_form= SomeCredentialsForm(deserialize_form(credentials_form), instance=credentials)
if some_cred_form.is_valid():
try:
(...some_words_and_things_here...)
现在,我的问题是在编写测试时我没有调用js函数,我只想将表单发送到some_python_function。但是,我不能直接这样做:
form_data = {'data_1': data_1, "data_2": data_2, 'data_3': data_3}
form = SomeCredentialsForm(data=form_data)
self.assertEqual(some_python_function(person_id, form), (...))
显然,这不起作用:因为some_cred_form.is_valid()== False,所以代码的相关部分没有被检查。 无论js函数做什么,我都需要以某种方式对我的表单做。但是我该怎么做?
答案 0 :(得分:1)
Jquery serialize方法只返回一个查询字符串。您可以尝试创建一个类似的字符串并将其传递给函数:
form_data = 'data_1={}&data_2={}&data_3={}'.format(data_1, data_2, data_3)
self.assertEqual(some_python_function(person_id, form_data), (...))