25

我似乎在让我的 Jasmine 单元测试实际执行时遇到问题。我已经通过将 logLevel 设置为 LOG_DEBUG 来验证我的所有脚本都被加载了。我的单元测试与服务测试@ https://github.com/angular/angular-seed/blob/master/test/unit/servicesSpec.js相同。

另外,我使用过 Testacular(在它更名为 Karma 之前),我不记得有这个问题。我似乎让 Chrome 运行,但我必须手动点击“调试”按钮。即使我按下此按钮,我的测试也不会运行。

系统详情:

  • Windows 7的
  • 节点 v0.10.4
  • 铬 26.0.14
  • Karma 0.8.5(安装了 3 个警告 - 2 个精度损失和一个“内联函数 v8::Persistent v8::Persistent::New(v8::Handle) 没有定义”)

这是我的模块代码(Scripts/main.js):

angular.module('sb.services', []).value('version', '0.0.1').value('amplify', amplify);
angular.module('sb.directives', []);
angular.module('sb.filters', []);
angular.module('sb.controllers', []).controller('SbController', [
    '$scope', 
    'amplify', 
    function ($scope, amplify) {
        $scope.message = 'Hello World! (amplify exists?=' + !!amplify + ')';
    }
]);
angular.module('sb', [
    'sb.services',
    'sb.directives',
    'sb.filters',
    'sb.controllers'
]);

这是我的规范(Test/unit/servicesSpec.js):

'use strict';

describe('my services', function () {
    beforeEach(module('sb.services'));

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

这是我的 karma.conf.js 文件:

// Karma configuration
// Generated on Mon Apr 15 2013 20:56:23 GMT-0400 (Eastern Daylight Time)


// 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,
  'Vendor/angular-1.0.6/angular.js',
  'Vendor/angular-1.0.6/angular-*.js',
  'Vendor/json2/json2.js',
  'Vendor/jquery/jquery-1.8.2.js',
  'Vendor/amplify/amplify.js',
  'Scripts/main.js',
  'Test/unit/*.js'
];


// list of files to exclude
exclude = [

];


// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];


// web server port
port = 9876;


// cli runner port
runnerPort = 9100;


// enable / disable colors in the output (reporters and logs)
colors = true;


// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_WARN;


// enable / disable watching file and executing tests whenever any file changes
autoWatch = false;


// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['Chrome'];

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


// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;


// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
4

6 回答 6

15

我刚刚遇到了同样的问题,我发现我必须autoWatch = true在 Karma 自动运行测试之前进行设置。

于 2013-09-14T06:34:41.673 回答
14

或者,您可以在 karma.conf.js 中使用 exclude 部分

exclude = [
  'Vendor/angular-1.0.6/angular-scenario.js'
];
于 2013-06-15T02:47:45.760 回答
12

我的最后一个答案是错误的(将 JASMINE 和 JASMINE_ADAPTER 线移动到 angular.js 线下方)。它解决了这个特定问题,但产生了其他问题。相反,我修复它的方法是只指定 angular-mocks 文件,而不是 angular-*,如下所示:

   JASMINE,
   JASMINE_ADAPTER,
  'Vendor/angular-1.0.6/angular.js',
  'Vendor/angular-1.0.6/angular-mocks.js',
  'Vendor/json2/json2.js',
  'Vendor/jquery/jquery-1.8.2.js',
  'Vendor/amplify/amplify.js',
  'Scripts/main.js',
  'Test/unit/*.js'
于 2013-04-16T21:56:11.153 回答
9

我尝试了以上所有方法都没有成功,直到最后......

在我的karma.conf.js我删除了requirejs依赖项,例如:

    frameworks: ['jasmine', 'requirejs'],

到:

    frameworks: ['jasmine'],
于 2015-02-20T12:33:34.350 回答
7

如果您尝试使用 JASMINE 和 JASMINE_ADAPTER 解决此问题,则不再受支持(至少在 Karma 版本 0.10.2 上)。

而是使用:

frameworks: ['jasmine']

在您的 Karma 配置文件中。您可以在此处阅读相关内容。

我还发现在我的文件数组中我设置included: false了一个模式。 included仅在您想要手动包含 Javascript 文件时使用(例如,如果您将使用 require.js)。如果您的所有测试都将从该模式加载,您将看到类似于以下内容的消息:

PhantomJS 1.9.2 (Linux): Executed 0 of 0 ERROR (0.151 secs / 0 secs)

因为永远不会包含包含测试的文件。从我的模式的 files 数组中删除included: false修复了这个问题,因为如果未指定包含的默认值是true.

于 2013-10-14T21:51:35.697 回答
3

在我的情况下singleRun设置为false

解决方案 // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true

于 2016-05-26T11:54:51.550 回答