【问题标题】:Unit-testing an angular service with Karma/Jasmine/JSPM使用 Karma/Jasmine/JSPM 对 Angular 服务进行单元测试
【发布时间】:2023-03-18 17:50:01
【问题描述】:

我正在为我用 Angular 1 和 JSPM 以及 Karma 和 Jasmine 编写的应用程序编写单元测试。

这是我的 Karma 配置(jspm 部分):

jspm: {
    meta: {
        'jspm_packages/github/angular/angular.js': {
            format: 'global',
            exports: 'angular'
        },
        'jspm_packages/github/angular/angular-mocks.js': {
            format: 'global',
            deps:   'angular'
        }
    },
    loadFiles: [
        'test/**/*.js'
    ],
    serveFiles: [
        'app/**/*.js'
    ]
},

首先,我想测试一个自定义角度服务:

// imports

class Game {

    constructor($rootScope, $http, $timeout, $translate, $location) {

        // ...

        this.$rootScope.game = this;

    }

}

这是我的测试文件:

import { module, inject } from 'angular-mocks';

describe('this is a test', function () {

    beforeEach(module('module-name'));

    var game;

    beforeEach(inject(function(_game_) {
        game = new _game_;
    }));

    it('should be defined', function () {
        expect(game).toBeDefined();
    });
});

主要问题是我一直有这个错误。 angular-mocks 中的 inject 函数似乎不起作用,因为我的变量 game 未定义,但应该是。

PhantomJS 2.1.1 (Windows 8 0.0.0) should be defined FAILED
    forEach
    loadModules
    createInjector
    workFn
    {path}/node_modules/karma-jspm/src/adapter.js:61:24
    tryCatchReject@D:/{path}/jspm_packages/system-polyfills.src.js:1188:34
    runContinuation1@D:/{path}/jspm_packages/system-polyfills.src.js:1147:18
    when@D:/{path}/jspm_packages/system-polyfills.src.js:935:20
    run@D:/{path}/jspm_packages/system-polyfills.src.js:826:17
    _drain@D:/{path}/jspm_packages/system-polyfills.src.js:102:22
    drain@D:/{path}/jspm_packages/system-polyfills.src.js:67:15
    Expected undefined to be defined.
    D:/{path}/node_modules/karma-jspm/src/adapter.js:61:24
    tryCatchReject@D:/{path}/jspm_packages/system-polyfills.src.js:1188:34
    runContinuation1@D:/{path}/jspm_packages/system-polyfills.src.js:1147:18
    when@D:/{path}/jspm_packages/system-polyfills.src.js:935:20
    run@D:/{path}/jspm_packages/system-polyfills.src.js:826:17
    _drain@D:/{path}/jspm_packages/system-polyfills.src.js:102:22
    drain@D:/{path}/jspm_packages/system-polyfills.src.js:67:15

所以,我不知道为什么它不起作用。有什么线索吗?

【问题讨论】:

  • 有什么解决办法吗?我也面临同样的问题

标签: javascript angularjs karma-runner jspm angular-mock


【解决方案1】:

现在可能为时已晚,但请尝试不使用 new 关键字:

beforeEach(inject(function(_game_) {
    game = _game_;
}));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2020-03-14
    • 1970-01-01
    • 2020-07-11
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多