2013-07-03 4 views
3

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

js/ 
    |-- tests.js 
    |-- karma.config.js 
    |-- app/ 
     |-- controllers.js 
    |-- tests/ 
     |-- unit/ 
       |-- loginSpec.js 
    |-- vendor/ 
     |-- jquery.js 

Я следующую документацию на http://karma-runner.github.io/0.8/plus/RequireJS.html и моя конфигурация настроить следующим образом (минус несущественных деталей):

// 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, 
    REQUIRE, 
    REQUIRE_ADAPTER, 
    'tests.js', 
    {pattern: 'tests/unit/*.js', included: false} 
]; 

В моих контроллеров. JS, я определить функцию с именем LoginCtrl, и я хочу, чтобы проверить эту функцию в loginSpec.js

define(['controllers'],function(controllers) { 
    describe('Login controllers', function() { 
     describe('LoginCtrl', function(){ 
      it('should return 1', function() { 
       var scope = {}, 
       ctrl = new LoginCtrl(scope); 
       expect(1).toBe(1); 
      }); 
     }); 
    }); 
}); 

Проблема в том, мой браузер не может загрузить файл controllers.js Eventhough Я настроил конфигурацию requirejs моего основного тестового файла (tests.js) следующим образом:

var tests = Object.keys(window.__karma__.files).filter(function (file) { 
     return /Spec\.js$/.test(file); 
}); 
requirejs.config({ 
    baseUrl: '/base/app', 
    paths: { 
     jquery: 'vendor/jquery', 
    }, 
    deps: tests, 
    callback: window.__karma__.start 
}); 

браузер делает искать файл в http://localhost:9876/base/app/controllers.js. Разве это не правильный путь?

ответ

0

У меня была аналогичная проблема, но я не нашел приятного решения. Я должен был применить «взломать», добавив расширение .js в свой файл spec, в вашем случае попробуйте изменить «контролеры» на «controllers.js» в вашем loginSpec.js

1

Путь не подходит, я думаю, он должен быть jquery: '../vendor/jquery', потому что база requirejs указывает на каталог app. Но это не единственная проблема ...

К карме вы должны добавить каждый файл к шаблонам, которые хотите использовать. Файлы с флагом include: true будут забиты кармой, остальные могут быть использованы в тестах. Если два шаблона охватывают имя файла, тогда первый шаблон переопределяет второй (так что это в обратном порядке, чем мы обычно делаем). В вашем случае вы должны использовать что-то вроде этого karma.conf.js:

module.exports = function (config) { 
    config.set({ 
     basePath: './', 
     frameworks: ['jasmine', 'requirejs'], 
     files: [ 
      {pattern: 'tests.js', included: true}, 
      {pattern: 'test/**/*.js', included: false}, 
      {pattern: 'app/**/*.js', included: false}, 
      {pattern: 'vendor/**/*.js', included: false} 
     ], 
     exclude: [ 

     ], 
     reporters: ['progress'], 
     port: 9876, 
     colors: true, 
     logLevel: config.LOG_INFO, 
     autoWatch: true, 
     browsers: ['Firefox'], 
     captureTimeout: 6000, 
     singleRun: false 
    }); 
}; 
Смежные вопросы