Подтвердить что ты не робот

Карма не выполняет никаких модульных тестов

Кажется, у меня возникла проблема с тем, чтобы мои модульные тесты Jasmine действительно выполнялись. Я проверил, что все мои скрипты загружаются, установив logLevel в LOG_DEBUG. Мой unit test идентичен сервису test @https://github.com/angular/angular-seed/blob/master/test/unit/servicesSpec.js.

Кроме того, я использовал Testacular (до того, как он был переименован в Karma), и я не помню эту проблему. Кажется, я запускаю Chrome, но мне нужно вручную нажать кнопку "Отладка". Даже когда я нажимаю эту кнопку, мои тесты не запускаются.

Сведения о системе:

  • Windows 7
  • Node v0.10.4
  • Chrome 26.0.14
  • Карма 0.8.5 (установлена ​​с тремя предупреждениями - 2 потери точности и одно определение нет для встроенной функции v8:: Постоянное v8:: Постоянное:: Новое (v8:: Ручка) ')

Здесь мой код модуля (Scripts/main.js):

angular.module('sb.services', []).value('version', '0.0.1').value('amplify', amplify);
angular.module('sb.directives', []);
angular.module('sb.filters', []);
angular.module('sb.controllers', []).controller('SbController', [
    '$scope', 
    'amplify', 
    function ($scope, amplify) {
        $scope.message = 'Hello World! (amplify exists?=' + !!amplify + ')';
    }
]);
angular.module('sb', [
    'sb.services',
    'sb.directives',
    'sb.filters',
    'sb.controllers'
]);

Здесь мой spec (Test/unit/servicesSpec.js):

'use strict';

describe('my services', function () {
    beforeEach(module('sb.services'));

    describe('version', function () {
        it('should return current version', inject(function(version) {
            expect(version).toEqual('0.0.1');
        }));
    });
});

Здесь мой файл karma.conf.js:

// Karma configuration
// Generated on Mon Apr 15 2013 20:56:23 GMT-0400 (Eastern Daylight Time)


// base path, that will be used to resolve files and exclude
basePath = '';


// list of files / patterns to load in the browser
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'Vendor/angular-1.0.6/angular.js',
  'Vendor/angular-1.0.6/angular-*.js',
  'Vendor/json2/json2.js',
  'Vendor/jquery/jquery-1.8.2.js',
  'Vendor/amplify/amplify.js',
  'Scripts/main.js',
  'Test/unit/*.js'
];


// list of files to exclude
exclude = [

];


// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];


// web server port
port = 9876;


// cli runner port
runnerPort = 9100;


// enable / disable colors in the output (reporters and logs)
colors = true;


// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_WARN;


// enable / disable watching file and executing tests whenever any file changes
autoWatch = false;


// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['Chrome'];

junitReporter = {
    outputFile: 'Test/out/unit.xml',
    suite: 'unit'
};


// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;


// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
4b9b3361

Ответ 1

Мой последний ответ был неправильным (перемещение строк JASMINE и JASMINE_ADAPTER ниже строк angular.js). Он исправил эту конкретную проблему, но создал другие проблемы. Вместо этого я решил исправить только файл angular -mocks вместо angular - *, например:

   JASMINE,
   JASMINE_ADAPTER,
  'Vendor/angular-1.0.6/angular.js',
  'Vendor/angular-1.0.6/angular-mocks.js',
  'Vendor/json2/json2.js',
  'Vendor/jquery/jquery-1.8.2.js',
  'Vendor/amplify/amplify.js',
  'Scripts/main.js',
  'Test/unit/*.js'

Ответ 2

У меня была одна и та же проблема, и я обнаружил, что мне пришлось установить autoWatch = true, прежде чем Карма автоматически выполнит тесты.

Ответ 3

В качестве альтернативы вы можете использовать раздел exclude в своем файле karma.conf.js

exclude = [
  'Vendor/angular-1.0.6/angular-scenario.js'
];

Ответ 4

Я пробовал все выше, без успеха, пока наконец...

В моем karma.conf.js я удалил зависимость requirejs, например:

    frameworks: ['jasmine', 'requirejs'],

в

    frameworks: ['jasmine'],

Ответ 5

Если вы пытаетесь решить эту проблему с помощью JASMINE и JASMINE_ADAPTER, это больше не поддерживается (по крайней мере, в версии Karma 0.10.2).

Вместо этого используйте:

frameworks: ['jasmine']

в вашем файле конфигурации Karma. Вы можете прочитать об этом здесь.

Я также обнаружил, что в массиве файлов я установил included: false для шаблона. included используется, только если вы хотите вручную включить файлы Javascript (например, если вы будете использовать require.js). Если все ваши тесты будут загружены из этого шаблона, вы увидите сообщение, похожее на:

PhantomJS 1.9.2 (Linux): Executed 0 of 0 ERROR (0.151 secs / 0 secs)

так как файл, содержащий тесты, никогда не включается. Удаление included: false из массива файлов для моего шаблона исправлено, поскольку значение по умолчанию, если оно не указано, не указано true.

Ответ 6

В моем случае singleRun было установлено значение false

Решение: // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true