0

我正在处理的项目使用了一个 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 %}在模板的开头。不能解决问题。

我一直很高兴地忽略了整个事情,但现在我需要用这个页面编写一个柏树测试,错误阻止了测试。

赛普拉斯有没有办法忽略这个错误?或者有没有办法从一开始就防止错误发生?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',
4

2 回答 2

0

默认情况下,当抛出未捕获的异常时,赛普拉斯测试失败。这种行为对许多用户很有用,并且经常提醒开发人员注意他们不知道的错误。

话虽如此,有时会抛出未捕获的异常,而您希望忽略它并继续进行测试(特别是如果它是从 3rd 方插件抛出的)。您可以通过使用赛普拉斯事件来做到这一点。

要关闭所有未捕获的异常处理:

Cypress.on('uncaught:exception', (err, runnable) => {
   // returning false here prevents Cypress from failing the test
   return false
})

您可能希望在支持文件 ( cypress/support/index.js) 中执行此操作,以便将其应用于所有规范文件。

于 2017-12-20T19:28:15.857 回答
0

错误很可能与这行代码有关:

'django' in window && django.jQuery ? django.jQuery: jQuery

理解和考虑三元条件可能会有所帮助。

开箱即用,Django 管理员在窗口全局上设置了一个“django”变量并将 jQuery 固定到它。这是因为管理员使用 jQuery。在管理员之外,在自定义模板中,由开发人员决定如何在需要时包含 jQuery。

因此,该语句'django' in window && django.jQuery将在 Django 管理页面上进行评估,true并且在三元组的“真实”一侧,该片段继续并引用它。或者,在三元的错误方面,假设 jQuery 已经存在于全局范围内。然后,对 jQuery 的引用作为参数传递到IIFE中。

我会仔细查看您的页面源以确定是否/在何处引用了 jQuery 模块,并确保在该代码段之前正确加载它。

于 2017-12-15T09:37:17.413 回答