问题 TypeError:'undefined'不是构造函数(评估'new JdRes())


我正在为角度控制器编写茉莉花测试规范。 在这里,我得到了错误 TypeError: 'undefined' is not a constructor (evaluating 'new JdRes())  - 虽然我把它定义为

JdRes = jasmine.createSpy('JdRes');

控制器中的代码段如下

function (myService, $scope, $attrs, $q, $parse) {
    'use strict';

    var JdRes, resource;

    JdRes = myService('JdRes');
    resource = new JdRes();
}

8463
2018-05-25 23:49


起源

为什么没有关闭 } 在你的功能? - Joeytje50


答案:


根据您提供的信息,我可以得出的唯一结论是 jasmine.createSpy('JdRes') 回报 undefined

这意味着要么 jasmine.createSpy 没有 return 语句,或者它尝试返回值为的东西 undefined。您应该检查该功能是否确实具有 return 语句,如果是,则返回值不是 undefined。我无法告诉你什么。


8
2018-05-26 00:03



对于后代,如果你这样做,也会发生这种情况 spyOn(obj, 'someMethod').and.return('some value')。它应该是 .and.returnValue('some value') - Allyl Isocyanate


当你为函数注入不同数量的项目时,也会发生这种情况 - 无论哪种方式,我相信。例如:

(function () {
'use strict';

angular.module('controllers').controller('myController', MyController);

MyController.$inject = ['$scope',
    '$state',
    '$compile',
    'aService',
    'aServiceNotDefinedInConstructorArgs'];

function MyController('$scope',
    '$state',
    '$compile',
    'aService') {

    var vm = this;
    ...
}

这里的区别是aServiceNotDefinedInConstructorArgs正在注入,但不是MyController的参数。


2
2017-08-17 16:57