2013-07-03 36 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); 
      }); 
     }); 
    }); 
}); 
0123來測試這個功能

問題是我的瀏覽器無法加載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

我有類似的問題,但我沒有找到很好的解決方案。我必須通過在我的spec文件中添加.js擴展名來應用「hack」,在您的情況下,嘗試在loginSpec.js中將'controllers'更改爲'controllers.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 
    }); 
};