2014-02-12 58 views
1

我想在Require.js和AngularJS下用業力寫單元測試。我以https://github.com/tnajdek/angular-requirejs-seed爲起點。當我按原樣構建項目時,一切正常。Karma/Require.js找不到文件

Chrome 32.0.1700 (Windows 7): Executed 3 of 3 SUCCESS (0.317 secs/0.007 secs) 

現在,我想引用不同版本的AngularJS腳本,而不是由bower加載。 (我們有一個生產目錄結構,我不能改變。)我在/ scripts/angular-test中有種子項目,我想引用不在bower目錄中的AngularJS文件,但是它在我們系統中的/ scripts /angular/angular-dev-1.2.8.js。

我想我需要做的就是修改karma.conf.js文件指向一個不同的根的第一件事:

module.exports = function(config) { 
    config.set({ 
     basePath: '../..', 
     frameworks: ['jasmine', 'requirejs'], 
     files: [ 
      {pattern: 'angular-test/app/js/*.js', included: false}, 
      {pattern: 'angular-test/app/js/**/*.js', included: false}, 
      {pattern: 'angular-test/test/unit.js', included: false}, 
      {pattern: 'angular-test/test/unit/*.js', included: false}, 
      {pattern: 'angular-test/test/unit/**/*.js', included: false}, 
      {pattern: 'angular-test/bower_components/**/*.js', included: false}, 
      // needs to be last http://karma-runner.github.io/0.10/plus/requirejs.html 
      'angular-test/test/main-test.js' 
     ], 
    autoWatch: true, 
    LogLevel: config.LOG_DEBUG, 
    browsers: ['Chrome'], 
    junitReporter: { 
     outputFile: 'angular-test/test_out/unit.xml', 
     suite: 'unit' 
    } 
    }); 
}; 

我改變了所有的其他裁判有在角測試他們的路徑,例如在main-test.js文件中:

require.config({ 
    paths: { 
     angular: '/base/angular-test/bower_components/angular/angular', 
     angularRoute: '/base/angular-test/bower_components/angular-route/angular-route', 
     angularMocks: '/base/angular-test/bower_components/angular-mocks/angular-mocks', 
     text: '/base/angular-test/bower_components/requirejs-text/text', 
     fixtures: '/base/angular-test/test/unit/fixtures' 

    }, 
    baseUrl: '/base/angular-test/app/js', 
... 

一切仍然有效。請注意,在這一點上,我仍然使用angular-requirejs-seed中的所有相同文件。但是,瀏覽器中的URL確實發生了變化;而不是

http://localhost:9876/base/bower_components/angular/angular.js 

引用angular.js現在

http://localhost:9876/base/angular-test/bower_components/angular/angular.js 

到目前爲止好。現在,我想改變對angular.js的引用。所以,我在主test.js將其更改爲

 angular: '/base/angular/angular-dev-1.2.8', 

現在,再也找不到角 - 具體而言,瀏覽器嘗試打

http://localhost:9876/base/angular/angular-dev-1.2.8.js 

正如人們所期望的,但它可以讓導致人緣錯誤404

ERROR: 'There is no timestamp for /base/angular/angular-dev-1.2.8.js!' 
Chrome 32.0.1700 (Windows 7): Executed 0 of 0 SUCCESS (0 secs/0 secs) 
Chrome 32.0.1700 (Windows 7) ERROR 
    Uncaught Error: Script error for: angular 
    http://requirejs.org/docs/errors.html#scripterror 
    at d:/Gary/AppData/Roaming/npm/node_modules/requirejs/require.js:141 
Chrome 32.0.1700 (Windows 7): Executed 0 of 0 ERROR (0.254 secs/0 secs) 

鑑於修改的參考,以「/base/angular-test/bower_components/angular/angular.js」的作品,我希望這也是工作,但它不」噸。我唯一能想到的是,由於某種原因,因果網站服務器限制只能訪問/ base/angular-test子樹,儘管我無法想象爲什麼會這樣。

回答

0

嘗試{pattern: 'angular-test/bower_components/**/*.js', included: false},在karma.conf.js文件,然後在主test.js文件提到:

shim: { 

    'angular' : {'exports' : 'angular'}, 
    'angularMocks': { 
     deps:['angular'], 
     'exports':'angular.mock' 
    }, 
    '<your App name>': { 
     deps: ['angular'], 
     'exports': '<your App name>' 

} 

我認爲當requirejs無法插入的角度您收到錯誤。當Chrome打開時,點擊調試按鈕,然後在調試器上執行檢查元素並檢查<body>以及<head>中是否加載了所有必需的文件。希望這可以幫助。乾杯。

0

到目前爲止好。現在,我想改變對angular.js的引用。所以我把它在main-test.js中改爲

angular:'/base/angular/angular-dev-1.2。8' ,

現在,它不再能夠找到角 - 具體地,瀏覽器嘗試打

本地主機:9876 /鹼/角度/角-DEV-1.2.8.js

正如人們所期望的,但它得到了404導致人緣錯誤

後您更改了主test.js和東西參考啓動失敗,你回到你的業障的配置文件,並確保新文件將包含在內?我總是忘記這麼做,所以我總是以這些404s結束。