【问题标题】:Error Karma 'undefined' scope variable in beforeEachbeforeEach 中的错误 Karma 'undefined' 范围变量
【发布时间】:2014-12-24 03:06:06
【问题描述】:

这是我的 2 个文件和错误。我正在运行 Karma,这是我的 karma.conf.js:https://gist.github.com/devanp92/a87c0bcc2bf5b8e17f64。运行“业力启动”后,我收到此错误。这是一个非常简单的测试文件(或者我假设),我仍然收到这些错误。

Main.js - 这是一个控制器

angular.module('SSLApp').controller('MainCtrl',  
  function($scope, $rootScope) {
    $scope.thing = 1;
});

MainSpec.js - 这是我的测试文件

describe('MainCtrl', function() {
var controller, scope;

beforeEach(angular.module('SSLApp'));

beforeEach(inject(function($controller, $rootScope) {
    scope = $rootScope.$new();
    controller = $controller('MainCtrl', {
        $scope: scope
    });
}));

it('should have scope to be defined', function(scope) {
    expect(scope).toBeDefined();
});

});

错误!看起来它在 var MainCtrl = $controller 中被称为 undefined...

TypeError: 'undefined' is not a function (evaluating 'queueableFn.fn.call(self.userContext)')
        at /Users/BLAH/Documents/node_modules/karma-jasmine/lib/adapter.js:184
        at `http://localhost:9876/karma.js:185`
        at `http://localhost:9876/context.html:53`
    Error: [ng:areq] Argument 'MainCtrl' is not a function, got undefined
    http://errors.angularjs.org/1.3.8/ng/areq?p0=MainCtrl&p1=not%20a%20function%2C%20got%20undefined
        at assertArg (/Users/BLAH/Documents/node_modules/angular/angular.js:1577)
        at assertArgFn (/Users/BLAH/Documents/node_modules/angular/angular.js:1588)
        at /Users/BLAH/Documents/node_modules/angular/angular.js:8418
        at /Users/BLAH/Documents/test/controllers/MainSpec.js:9
        at invoke (/Users/BLAH/Documents/node_modules/angular/angular.js:4182)
        at workFn (/Users/BLAH/Documents/node_modules/angular-mocks/angular-mocks.js:2350)
        at /Users/BLAH/Documents/node_modules/karma-jasmine/lib/adapter.js:184
        at http://localhost:9876/karma.js:185
        at http://localhost:9876/context.html:53
    undefined
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
PhantomJS 1.9.8 (Mac OS X): Executed 1 of 1 (1 FAILED) ERROR (4.999 secs / 5.012 secs)

【问题讨论】:

    标签: javascript angularjs karma-runner


    【解决方案1】:

    您的测试代码中有两个错误。

    首先你使用了错误的module函数。 angular.module() 函数提供了一个真正的框架模块,同时 simple module()angular.mock.module() 的别名,您应该在测试中使用它。所以你应该编写你的 beforeEach 函数如下:

    beforeEach(module('SSLApp'));
    

    此外,您使用参数定义了测试用例函数,但它应该是无参数的。 scope 变量可以从外部范围访问。

    it('should have scope to be defined', function() {
        expect(scope).toBeDefined();
    });
    

    【讨论】:

    • 对于那些使用 webpack 配置运行 karma 的人,我建议使用 angular.mock.module 而不是 module,因为全局 module 将指向节点的模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多