Модульное тестирование службы angular с помощью Karma/Jasmine/JSPM

Я пишу модульный тест для своего приложения, написанного на 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'
    ]
},

Для начала я хочу протестировать пользовательский сервис angular:

// 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();
    });
});

Основная проблема в том, что у меня постоянно возникает эта ошибка. Функция inject из angular-mocks, похоже, не работает, потому что моя переменная 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

Так вот, не могу понять, почему не работает. Любая подсказка?


person Menencia    schedule 04.07.2016    source источник
comment
Любое решение для этого? Я также сталкиваюсь с той же проблемой   -  person Hardik Sheth    schedule 19.07.2016


Ответы (1)


может быть, уже слишком поздно, но попробуйте без нового ключевого слова:

beforeEach(inject(function(_game_) {
    game = _game_;
}));
person r4ph43l    schedule 08.03.2017