2015-06-05 3 views
14

У меня есть настройка проекта apache cordova, и я пытаюсь использовать Karma в первый раз. Я начал этот проект так:Выполнено 0 из 0 ERROR при запуске Karma на проекте Cordova

karma start test/karma.conf.js --verbose 

Но все, что я получаю:

INFO [karma]: Karma v0.12.36 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser Chrome 
WARN [web-server]: 404: /favicon.ico 
INFO [Chrome 43.0.2357 (Windows 8.1 0.0.0)]: Connected on socket 0_IDnS6qvPg4OhGd7oq4 with id 66015767 
Chrome 43.0.2357 (Windows 8.1 0.0.0): Executed 0 of 0 ERROR (0.002 secs/0 secs) 

Я дважды проверил, что я сделал против the docs for configuring requirejs for karma.

karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '..', 
    frameworks: ['jasmine', 'requirejs'], 
    files: [ 
     {pattern: 'www/lib/ionic/js/*.min.js', included: false}, 
     {pattern: 'www/lib/ionic/js/angular/*.min.js', included: false}, 
     {pattern: 'www/lib/ionic/js/angular-ui/*.min.js', included: false}, 
     {pattern: 'www/js/**/*.js', included: false}, 
     {pattern: 'test/specs/*Spec.js', included: false}, 
     {pattern: 'test/test-app.js', included: true} 
    ], 
    exclude: [ 
     'www/js/app.js' 
    ], 
    preprocessors: { 
    }, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false 
    }); 
}; 

тест-app.js

var tests = []; 
for(var file in window.__karma__.files) { 
    if(window.__karma__.files.hasOwnProperty(file)) { 
     if(/Spec\.js$/.test(file)) { 
      tests.push(file); 
     } 
    } 
} 

requirejs.config({ 
    baseUrl: 'www', 
    paths: { 
     'angular': 'lib/ionic/js/angular' 
     ,'angular-ui': 'lib/ionic/js/angular-ui' 
    }, 
    shim: { 
     'angular': {exports: 'angular'}, 
     'www/js/controllers': { deps: ['angular']} 
    }, 
    deps: tests, 
    callback: window.__karma__.start 
}) 

helloSpec.js

define('helloTests', ['angular'], function() { 
     describe('UnitTest: Hello', function() { 
      it('is defined', function() { 
       expect([1,2,3].length).toEqual(3); 
      }); 
     }); 
    }); 

А вот й е в результате debug.html:

<!doctype html> 
<html> 
<head> 
    <title>Karma DEBUG RUNNER</title> 
    <link href="favicon.ico" rel="icon" type="image/x-icon" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
    <script type="text/javascript"> 
    window.__karma__ = { 
     info: function(info) { 
     if (info.dump && window.console) window.console.log(info.dump); 
     }, 
     complete: function() { 
     if (window.console) window.console.log('Skipped ' + this.skipped + ' tests'); 
     }, 
     store: function() {}, 
     skipped: 0, 
     result: window.console ? function(result) { 
     if (result.skipped) { 
      this.skipped++; 
      return; 
     } 
     var msg = result.success ? 'SUCCESS ' : 'FAILED '; 
     window.console.log(msg + result.suite.join(' ') + ' ' + result.description); 

     for (var i = 0; i < result.log.length; i++) { 
      window.console.error(result.log[i]); 
     } 
     } : function() {}, 
     loaded: function() { 
     this.start(); 
     } 
    }; 

    window.__karma__.config = {"args":[],"useIframe":true,"captureConsole":true}; 


    // All served files with the latest timestamps 
    window.__karma__.files = { 
    '/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/requirejs/require.js': 'f9d7ac1ba78c53a51fd346e3901a5f406f060f44', 
    '/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/karma-requirejs/lib/adapter.js': 'f2d8d5976c2bbe89ebe046ac51f393f5547bbc3b', 
    '/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/jasmine-core/lib/jasmine-core/jasmine.js': '578a1e5ff14db21b04e2d6db7fd0eda37042440c', 
    '/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/karma-jasmine/lib/boot.js': '997181251903c5bcc9659d92edc872a2a4abfa7b', 
    '/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/karma-jasmine/lib/adapter.js': '0a69ad1fa10cc8be0a12b241227d3b834f82db4f', 
    '/base/www/lib/ionic/js/ionic-angular.min.js': '44040e6eeb17077cc79b0985118b15bf1420217d', 
    '/base/www/lib/ionic/js/ionic.bundle.min.js': '4a4bfece5434ae5c4cebab055aaae274f82050d9', 
    '/base/www/lib/ionic/js/ionic.min.js': '3e42a6e6700ba9982583b6b5da48861d202d8cfe', 
    '/base/www/lib/ionic/js/angular/angular-animate.min.js': '6df7f913a45a779638fd60cce18eee17268460d2', 
    '/base/www/lib/ionic/js/angular/angular-resource.min.js': 'eca9d7e3b12d62b9da13216f1d3b39fcd411f860', 
    '/base/www/lib/ionic/js/angular/angular-sanitize.min.js': 'b8cf1b04b40df803c16edda80c431ec422b63ad8', 
    '/base/www/lib/ionic/js/angular/angular.min.js': '09028d3553206017f5ced7249be5641baaea2020', 
    '/base/www/lib/ionic/js/angular-ui/angular-ui-router.min.js': '0973f9c46d3be867276e941e2e6af9c662a92333', 
    '/base/www/js/controllers/game.js': '4b67bf783d76ae9f67ac5d569e78319be4a85321', 
    '/base/www/js/controllers/setup.js': 'b466bd52a326d35700517383a6ceb5b25b3ab44c', 
    '/base/www/js/directives.js': 'fbc832e4aa0c55a597a57cd4474aa9435bc17bf1', 
    '/base/www/js/services.js': 'df5339fa9aa37d92974fe59c392b8fb53a71497d', 
    '/base/test/specs/helloSpec.js': 'b8f2b498922be08d7ff36bafd094132b9c75d357', 
    '/base/test/test-app.js': '432128c0bcd0257679fb9f4f31ff75a1060f64db' 
}; 

    </script> 
    <!-- Dynamically replaced with <script> tags --> 
    <script type="text/javascript" src="/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/requirejs/require.js"></script> 
<script type="text/javascript" src="/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/karma-requirejs/lib/adapter.js"></script> 
<script type="text/javascript" src="/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> 
<script type="text/javascript" src="/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/karma-jasmine/lib/boot.js"></script> 
<script type="text/javascript" src="/absolutec:/Users/Mark/AppData/Roaming/npm/node_modules/karma-jasmine/lib/adapter.js"></script> 
<script type="text/javascript" src="/base/test/test-app.js"></script> 
    <script type="text/javascript"> 
    window.__karma__.loaded(); 
    </script> 
</body> 
</html> 

Я предполагаю, что список обслуживаемых документов все затянуты в requirejs и теги сценария то, что добавляется кармой.

Выход консоли:

Skipped 0 tests 

Так это выглядит, как он просто не видит определения тестов. Но когда я пошагово отлаживать и установить точку останова в requirejs.config я могу видеть, что «тесты» массив содержит мой тестовый файл:

/base/test/specs/helloSpec.js 

Я также могу видеть это было загружено, глядя на панели Сети Хрома , Какие списки:

debug.html 
boot.js 
jasmine.js 
adapter.js 
require.js 
test-app.js 
adapter.js 
helloSpec.js 

ответ

21

Раньше я получал ошибку:

Mismatched anonymous define() module: ... 

Так что я изменила вызов с определения функции от

define(['angular'], function(angular) { 
    .... 
}); 

в

define('helloTests', ['angular'], function(angular) { 
    .... 
}); 

Это избавился от деталей ошибки, но не сделал исправить что-нибудь. Оказывается, это также не помогло, так как я больше не мог видеть сообщение об ошибке. После публикации я попытался удалить его по прихоти, так как не мог видеть, что он используется где-то еще. Тогда сообщение об ошибке изменено на:

Chrome 43.0.2357 (Windows 8.1 0.0.0) ERROR: 'There is no timestamp for www/lib/ionic/js/angular.js!' 

WARN [web-server]: 404: /www/lib/ionic/js/angular.js 
Chrome 43.0.2357 (Windows 8.1 0.0.0) ERROR 
    Uncaught Error: Script error for: angular 
    http://requirejs.org/docs/errors.html#scripterror 
    at c:/Users/Mark/AppData/Roaming/npm/node_modules/requirejs/require.js:141 

Поскольку я с помощью мин файлов (проще отфильтровать версии отладки путем включения «* .min.js» в шаблонах файлов) Я изменил мои requirejs.config пути и прилагается ".мин», как это:

requirejs.config({ 
    baseUrl: 'www', 
    paths: { 
     'angular': 'lib/ionic/js/angular/angular.min' 
     ,'angular-ui': 'lib/ionic/js/angular-ui/angular-ui.min' 
    }, 
    ... 
}) 

На данный момент сообщение об ошибке изменилось только сказать, что не было никакой метки времени для angular.min.js В этот момент я заметил, что путь был родственником и начал.„базовый/WWWW“ .. Вот когда я, наконец, заметил, что-то я пропустил in the docs Так что я изменил параметр «BaseUrl» в моем requirejs.config добавить «базу /»:

requirejs.config({ 
    baseUrl: 'base/www', 
    ... 
}) 

Теперь больше нет ошибки и тест работает :

Chrome 43.0.2357 (Windows 8.1 0.0.0): Executed 1 of 1 SUCCESS (0.015 secs/0 secs) 

EDIT: Еще одна вещь, тест начал работать, но я не заметил, что все еще получаю сообщение «Нет метки». Менял мой параметр requirejs.config baseUrl относительно абсолютного (добавленный «/» к началу) исправил его.

requirejs.config({ 
    baseUrl: '/base/www', 
    ... 
}) 

Теперь я запущен.

Смежные вопросы