unit-testing - 整合測試 - 寫test




未定義角度返回模塊中的測試服務 (5)

我試圖在我的項目中運行默認的服務單元測試(從GitHub上的Angular Seed項目中獲取),但我一直收到錯誤“模塊未定義”。

我已經讀過,它可能與引用的JavaScript文件的順序有關,但我似乎無法使其工作,所以希望你們中的一個人能夠提供幫助。

我的測試配置如下所示:

basePath ='../';

files = [
“公共/ JavaScript的/ lib目錄/ jQuery的1.8.2.js',
“公共/ JavaScript的/ lib目錄/ angular.js',
'public / javascripts / lib / angular- .js',
“公共/ app.js”,
'public / controllers / .js',
“公共/ directives.js”,
“公共/ filters.js”,
“公共/ services.js”,
茉莉,
JASMINE_ADAPTER,
“公共/ Javascript角/ LIB /角mocks.js',
'test / unit / *。js'];

autoWatch = true;

browsers = ['Chrome'];

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

該服務如下所示:

angular.module('myApp.services', []).
  value('version', '0.1');

測試看起來像這樣:

'use strict';

describe('service', function() {
  beforeEach(module('myApp.services'));


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

而通過測試運行測試時的錯誤是這樣的:

ReferenceError:模塊未定義


window.module函數來自angular-mocks.js ,是angular-mocks.js的縮寫。 正如文檔中提到module功能只適用於Jasmine。

使用Testacular ,以下示例配置文件將加載angular-mocks.js

/** example testacular.conf.js */

basePath = '../';
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'path/to/angular.js',
  'path/to/angular-mocks.js',   // for angular.mock.module and inject.
  'src/js/**/*.js',             // application sources
  'test/unit/**/*.spec.js'      // specs
];
autoWatch = true;
browsers = ['Chrome'];

並且,如其他地方所建議的那樣,您可以使用調試日誌記錄運行Testacular以查看加載了哪些腳本(您也可以在檢查器中看到相同的內容):

testacular --log-level debug start config/testacular.conf.js

angular.mock.inject文檔包含一個非常完整的示例。


如果你使用Yeoman和角發生器,你可能會得到這個錯誤。 特別是當你做教程(._。)時
我通過將angular-mocks.js文件從bower_components / angular-mocks目錄複製到test / mock目錄來修復它。 當然你必須確定你的karma.conf.js文件配置正確。
問候!


我們在單元測試中使用沒有“角度”的'模塊',它工作正常。

CoffeeScript的:

describe 'DiscussionServicesSpec', ->
    beforeEach module 'DiscussionServices'
    beforeEach inject ... etc.

編譯為

JavaScript的:

describe('DiscussionServices', function() {
    beforeEach(module('DiscussionServices'));
    beforeEach(inject(function ... etc.

唯一一次我看到類似於你所描述的錯誤的是,如果在testacular.conf.js文件中,在規範試圖使用'module'之前,angular-mocks.js文件未在文件部分中列出。 如果我在“文件”列表中的測試之後將其放入,我會得到

ReferenceError: Can't find variable: module

(我們的測試正在通過PhantomJS運行)


我在我的karma配置中包含了angular-mocks.js,但仍然出現錯誤。 事實證明,順序在文件數組中很重要。 (duh)就像在html文檔的頭部一樣,如果腳本在定義之前調用角度,並且發生錯誤。 所以我只需要在angular.js和angular-mocks.js之後加入我的app.js。


當我做類似var module = angular.module('my',[])事情時,我遇到了同樣的問題。 我需要確保它被IIFE包圍





karma-runner