2015-07-14 3 views
1

У меня есть приложение Angular.js и я экспериментирую используя его с Browserify. Приложение работает, но я тоже хочу запустить тесты, у меня есть два теста жасмина, которые я запускаю с кармой. Я обозреваю браузер, чтобы дать мне доступ к angular.js и angular-mocks.js и другим тестовым приборам в рамках тестов.

Версии: -

"angular": "^1.4.0", 
"angular-mocks": "^1.4.0", 
"browserify": "^10.2.3", 
"karma": "^0.12.32", 
"karma-browserify": "^4.2.1", 
"karma-chrome-launcher": "^0.1.12", 
"karma-coffee-preprocessor": "^0.2.1", 
"karma-jasmine": "^0.3.5", 
"karma-phantomjs-launcher": "^0.1.4", 

Если я запускаю тесты по отдельности (комментируя один или другой из файла karma.conf), они оба работают нормально. (Уеу!)

Но если я запускаю их обоих, я получаю эту ошибку

TypeError: Cannot read property '$injector' of null 
    at Object.workFn (/tmp/3efdb16f2047e981872d82fd8db9c0a8.browserify:2272:22 <- node_modules/angular-mocks/angular-mocks.js:2271:0) 

глядя на линии 2271 из angular.mocks.js Он читает

if (currentSpec.$injector) { 

Так ясно currentSpec каким-то образом сейчас null.

У меня есть проблема, когда я вызываю «angular.mock.inject» во втором тесте.

beforeEach(angular.mock.inject(function (_GridUtilService_) { 
    gridUtilService = _GridUtilService_; 
})); 

Если я закомментируйте это работает, но, очевидно, я не могу затем запустить тест н мой gridUtilService.

Кто-нибудь знает, как запустить два (или более :-) угловато-ложных теста жасмина с кармой и прорисовать в браузере?

Ниже приведены мои тесты, файл karma.conf. Угловые службы работают при развертывании, но для этой цели они могут просто быть тупыми услугами, которые ничего не делают.

karma.conf: -

// Karma configuration 

module.exports = function(config) { 
    config.set({ 

    // base path that will be used to resolve all patterns (eg. files, exclude) 
    basePath: '', 

    // frameworks to use 
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 
    frameworks: ['browserify', 'jasmine'], 

    // list of files/patterns to load in the browser 
    files: [ 
     'src/main/assets/js/**/*.js', 
//  'src/test/**/*.js' 
     'src/test/services/SettingUtil*.js', 
     'src/test/services/GridUtil*.js' 
    ], 


    // list of files to exclude 
    exclude: [ 
     'src/main/assets/js/**/app-config.js' 
    ], 


    // preprocess matching files before serving them to the browser 
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
    preprocessors: { 
     'src/main/assets/js/**/*.js': ['browserify'], 
     'src/test/**/*.js': ['browserify'] 
    }, 

    browserify: { 
     debug: true, 
     extensions: ['.js', '.coffee', '.hbs'] 
    }, 

    // test results reporter to use 
    // possible values: 'dots', 'progress' 
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter 
    reporters: ['progress'], 

    // web server port 
    port: 9876, 

    // enable/disable colors in the output (reporters and logs) 
    colors: true, 

    // level of logging 
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 
    logLevel: config.LOG_DEBUG, 

    // enable/disable watching file and executing tests whenever any file changes 
    autoWatch: true, 

    // start these browsers 
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 
// browsers: ['PhantomJS', 'Chrome'], 
// browsers: ['PhantomJS'], 
    browsers: ['Chrome'], 

    // Continuous Integration mode 
    // if true, Karma captures browsers, runs the tests and exits 
    singleRun: false 
    }); 
}; 

SRC/тест/услуги/SettingUtilServiceTest.js:

'use strict'; 

describe("SettingUtilServiceTest.", function() { 
    it("contains spec with an expectation", function() { 
    expect(true).toBe(true); 
    }); 

    require('angular'); 

    require('angular-mocks'); 

    // can't do below see error at https://github.com/xdissent/karma-browserify/issues/10 
    //beforeEach(module('dpServices')); 

    //so need todo this 
    beforeEach(angular.mock.module('dpServices')); 

    var fixtures = require('./serviceFixtures.js'); 

    var sus = fixtures.settingUtilServiceTestFixtures; 
    var ts1 = sus.tablesetting1; 
    var ts2 = sus.tablesetting2; 

    var settingUtilService; 

    beforeEach(angular.mock.inject(function (_settingUtilService_) { 
     settingUtilService = _settingUtilService_; 
    })); 

    it('should return an object containing mins and maxs from function minMaxes()', function() { 
     expect(ts1).toBeDefined(); 
     expect(ts2).toBeDefined(); 
     var minMaxs = settingUtilService.minMaxs(ts1); 
     var mins = minMaxs.mins; 
     expect(mins).toBeDefined(); 
     var maxs = minMaxs.maxs; 
     expect(maxs).toBeDefined(); 
    }); 

}); 

SRC/тест/услуги/GridUtilServiceTest.js:

'use strict'; 

describe("GridUtilServiceTest.", function() { 
    it("is a set of tests to test GridUtilService.", function() { 
    expect(true).toBe(true); 
    }); 

    require('angular'); 

    require('angular-mocks'); 

    // can't do below see error at https://github.com/xdissent/karma-browserify/issues/10 
// beforeEach(module('dpServices')); 

    //so need todo this 
    beforeEach(angular.mock.module('dpServices')); 

    var fixtures = require('./gridFixtures.js'); 

    var gridFix = fixtures.gridUtilServiceTestFixtures; 

    var ts1 = gridFix.tablesetting1; 
    var ts2 = gridFix.tablesetting2; 
    var ts3 = gridFix.tablesetting3; 

    var gridUtilService; 

    beforeEach(angular.mock.inject(function (_GridUtilService_) { 
    gridUtilService = _GridUtilService_; 
    })); 

    it('should return an object containing mins and maxs from function minMaxes()', function() { 
     expect(ts1).toBeDefined(); 
     expect(ts2).toBeDefined(); 
     expect(ts3).toBeDefined(); 
    }); 

}); 

Если вам нужен доступ к угловой настройке, я могу ее предоставить (разделить на несколько файлов, используя функцию require() браузера, и построенный с помощью gulp ... но, как я сказал, приложение работает нормально, и тесты заканчиваются только при наличии двух тестов, поэтому я думаю, что проблема связана с карма-жасмином и угловыми маками или перезаписыванием переменной currentSpec.

Если кто-то знает, как разделить мои угловые тесты на несколько тестов (я не хочу монолитный угловой тест) без сообщения об ошибке, вся помощь приветствуется. Благодарю.

ответ

0

У меня была такая же проблема, проблема для меня была в том, что мне требовались угловые и угловые макеты точно так же, как и внутри каждого описываемого блока. Я переместил две строки

require('angular'); 
require('angular-mocks'); 
+0

спасибо, я дам вам попробовать и подправить вас, если он работает :-) – user2056182