Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如果attr未定义,则测试指令引发异常_Angularjs_Unit Testing_Angularjs Directive_Karma Runner - Fatal编程技术网

Angularjs 如果attr未定义,则测试指令引发异常

Angularjs 如果attr未定义,则测试指令引发异常,angularjs,unit-testing,angularjs-directive,karma-runner,Angularjs,Unit Testing,Angularjs Directive,Karma Runner,我有一个angularjs指令,它需要定义一个资源属性,以便生成一些逻辑。下一个是它的最低定义: angular.module('myAppName') .directive('loadObjects', loadObjects); function loadObjects($window) { var directive = { restrict: 'E', template: '<md-content class="md-whitefr

我有一个angularjs指令,它需要定义一个资源属性,以便生成一些逻辑。下一个是它的最低定义:

angular.module('myAppName')
    .directive('loadObjects', loadObjects);

function loadObjects($window) {
    var directive = {
        restrict: 'E',
        template: '<md-content class="md-whiteframe-z4" layout-padding></md-content>',
        link: function(scope, element, attrs) {
            if (angular.isUndefined(attrs.resource)) {
                throw 'resource attr is mandatory';
            }
        }
    };
    return directive;
}
我还尝试在模板中使用该指令,我可以在javascript控制台中看到异常

欢迎提出任何建议。谢谢你的阅读

编辑

之后,我尝试使用:

beforeEach(module('myAppName', function($provide, $injector) {
    $provide.constant('DEBUG', true);
    console.log($injector.get('DEBUG')); // it prints true
}));
在beforeach中,调试被更改,但不起作用


为了使我的测试成功,我需要
DEBUG=true
,我的第二个问题:这种方法有什么问题?

好的,这是我的最后一种方法:

正如我所说,如果我配置以下各项,我的测试将通过:

$ravenProvider.development(DEBUG); // with DEBUG=true
但由于:

beforeEach(module('myAppName', function($provide, $injector) {
    $provide.constant('DEBUG', true);
    console.log($injector.get('DEBUG')); // it prints true
}));
不起作用,我决定直接更改传递给raven的值:

beforeEach(module('myAppName', function($ravenProvider) {
    $ravenProvider.development(true);
}));

这就是它现在的工作原理。

好的,这是我的最后一种方法:

正如我所说,如果我配置以下各项,我的测试将通过:

$ravenProvider.development(DEBUG); // with DEBUG=true
但由于:

beforeEach(module('myAppName', function($provide, $injector) {
    $provide.constant('DEBUG', true);
    console.log($injector.get('DEBUG')); // it prints true
}));
不起作用,我决定直接更改传递给raven的值:

beforeEach(module('myAppName', function($ravenProvider) {
    $ravenProvider.development(true);
}));

这就是它现在的工作原理。

它读起来就像你试图调用一个不存在的对象的成员(
“undefined”不是一个对象,这使得它与你试图抛出的错误没有直接关系。控制台错误是否将其缩小到一行?这是控制台中打印的错误消息:
Raven:message resource attr是强制对象{异常:“resource attr是强制的”,原因:}angular.js:12416:18
。它按预期工作,但在测试中,我认为raven正在捕获异常(因为我没有在链接函数引发异常之前定义
资源
attr)。您是否在karma测试运行程序配置中包含raven?我不知道Raven是如何工作的……是的,karma.conf.js中包含了Raven。我刚刚得到它,在我的cofig块中,我使用
$ravenProvider.development(DEBUG),我已经定义了一个
DEBUG
作为一个角度常数。因此,当
DEBUG
为false时,raven会捕获错误。我想我应该尝试在浏览器中运行它,并在
raven.captureMessage
语句附近放置一个断点,以查看它是否存在于
$window
对象上。它看起来像是试图调用不存在的对象的成员(
'undefined'不是对象
),这使得它与您试图抛出的错误没有直接关系。控制台错误是否将其缩小到一行?这是控制台中打印的错误消息:
Raven:message resource attr是强制对象{异常:“resource attr是强制的”,原因:}angular.js:12416:18
。它按预期工作,但在测试中,我认为raven正在捕获异常(因为我没有在链接函数引发异常之前定义
资源
attr)。您是否在karma测试运行程序配置中包含raven?我不知道Raven是如何工作的……是的,karma.conf.js中包含了Raven。我刚刚得到它,在我的cofig块中,我使用
$ravenProvider.development(DEBUG),我已经定义了一个
DEBUG
作为一个角度常数。因此,当
DEBUG
为false时,错误被raven捕获。我想我应该尝试在浏览器中运行它,并在
raven.captureMessage
语句附近放置一个断点,以查看它是否存在于
$window
对象上。