我正在研究的项目使用了一个RGBField,它将这个脚本插入到模板中(因为我无法找到它所在的位置,所以在某个地方的django深处):
<script type="text/javascript">
(function($){
$(document).ready(function(){
$('#id_color').each(function(i, elm){
// Make sure html5 color element is not replaced
if (elm.type != 'color') $(elm).colorPicker({"colors": ["f1c40f", "2ecc71", "9b59b6", "e74c3c", "34495e", "3498db", "1abc9c", "f39c12", "d35400"]});
});
});
})('django' in window && django.jQuery ? django.jQuery: jQuery);
</script>
在控制台中我收到错误: Uncaught ReferenceError: jQuery is not defined
我无法检查错误发生的位置,但删除RGBField可以防止出现此问题 .
在项目中使用Jquery,如果我在模板中使用jQuery,它工作正常(因此模板本身不是问题) .
我已经将django-jquery添加到项目中,并在模板的开头包含了 {% load staticfiles %}
. 不解决问题 .
我一直在忽略整件事,但现在我需要用这个页面编写一个cypress测试,错误阻止了测试 .
柏树有办法忽略这个错误吗?或者有没有办法防止错误发生在一开始? RGBField是否有一个标志可以关闭jquery的检查?
运行 'django' in window
会生成 false
,并且运行 django.jQuery
会产生错误 . 运行 'django' in window && django.jQuery
产生 false
所以理论上这应该采取第二个选项,当我在控制台中运行时很好(但显然我遗漏了一些东西) .
编辑:
已安装的应用列表:
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.humanize',
'whitenoise.runserver_nostatic',
'storages',
'django.contrib.staticfiles',
'django.contrib.flatpages',
'jquery',
'django.contrib.sites',
'django_activeurl',
'webpack_loader',
'widget_tweaks',
'argonauts',
'rest_framework',
'main',
2 回答
该错误很可能与这行代码有关:
'django' in window && django.jQuery ? django.jQuery: jQuery
理解并考虑ternary conditional可能会有所帮助 .
开箱即用,Django Admin在全局窗口上设置了一个'django'变量,并将jQuery引入它 . 这是因为管理员使用了jQuery . 在管理员之外,在自定义模板中,由开发人员决定如何在需要时包含jQuery .
所以语句
'django' in window && django.jQuery
将在Django Admin页面和三元组的"true"评估为true
,该片段继续并引用它 . 或者在三元组的假方面,假设jQuery已经出现在全球范围内 . 然后将对jQuery的引用作为参数传递给IIFE .我会仔细查看您的页面源,以确定是否/在哪里引用jQuery模块,并确保在该片段之前正确加载它 .
默认情况下,当抛出未捕获的异常时,赛普拉斯会失败测试 . 这种行为对许多用户都很有用,并且经常会向开发人员发出他们不知道的错误 .
话虽这么说,有时会抛出未捕获的异常并且您想忽略它并继续进行测试(特别是如果它是从第三方插件中抛出的) . 您可以通过using Cypress events执行此操作 .
To turn off all uncaught exception handling:
您可能希望在支持文件(
cypress/support/index.js
)中执行此操作,以便将其应用于所有规范文件 .