错误:您需要包含一些实现__karma __。start方法的适配器

时间:2016-07-23 16:54:44

标签: karma-runner

我正在尝试使用业力运行单元测试,我收到错误You need to include some adapter that implements __karma__.start method!。我尝试使用gruntkarma start命令运行。我做谷歌搜索,所有的解决方案都没有成功。不知道我做错了什么。我在karma.conf.js文件的插件下包含了带有karma-jasmine的右适配器,该适配器具有__karma__.start方法。这是我的配置文件: -

 module.exports = function(config){
 config.set({
//  root path location that will be used to resolve all relative paths in files and exclude sections
basePath : '../',

files : [
  'bower_components/angular/angular.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'node_modules/requirejs/require.js',
  'node_modules/karma-jasmine/lib/adapter.js',
  'app.js',
  'mainapp/mainapp.js',
  'mainapp/notes/notes.js',
  'mainapp/notes/partial/create/create.js',
  'mainapp/notes/partial/create/create-spec.js'
], 

// files to exclude
exclude: [
  'bower_components/angular/angular/*.min.js'
],

// karma has its own autoWatch feature but Grunt watch can also do this
autoWatch : false,

// testing framework, be sure to install the correct karma plugin
frameworks: ['jasmine', 'browserify', 'requirejs'],

// browsers to test against, be sure to install the correct browser launcher plugins
browsers : ['PhantomJS'],

// map of preprocessors that is used mostly for plugins
preprocessors: {
  'mainapp/notes/partial/create/create-spec.js'  : ['browserify']
},

reporters: ['progress'],

// list of karma plugins
plugins : [
  'karma-teamcity-reporter',
  'karma-chrome-launcher',
  'karma-phantomjs-launcher',
  'karma-babel-preprocessor',
  'karma-requirejs',
  'karma-jasmine',
  'karma-browserify'
],

singleRun: true

})}

1 个答案:

答案 0 :(得分:0)

使用requirejs框架会关闭__karma__.start的自动调用。您需要创建一个文件,a)配置RequireJS,b)调用__karma__.start来完成测试。这是一个例子。它会扫描Karma所服务的文件,以查找包含测试的文件。这基于命名约定,任何以spec.jstest.js结尾的文件都是测试文件。它将文件名转换为模块名称。然后它配置RequireJS。它做的一件事是将所有测试模块作为deps传递,以便立即加载所有测试模块。它将__karma__.start设置为callback,以便在加载deps中传递的所有模块时,测试开始。

var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;

Object.keys(window.__karma__.files).forEach(function(file) {
    if (TEST_REGEXP.test(file)) {
        // Normalize paths to RequireJS module names.
        allTestFiles.push(file);
    }
});

require.config({

    baseUrl: '/base',

    paths: {
        'chai':             'node_modules/chai/chai',
        'chai-jquery':      'node_modules/chai-jquery/chai-jquery',
        'jquery':           'node_modules/jquery/dist/jquery.min',
        'underscore':       '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min',
        'sn/sn-underscore': 'static/scripts/sn/sn-underscore',
        'vendor/jquery-ui': '//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min'
    },

    deps: allTestFiles,

    callback: window.__karma__.start
});

您需要在karma.conf.js文件的files参数中包含此文件。由于您使用requirejs框架,因此您只需将其放在列表中的第一位。例如,如果您调用文件test-main.js(如Karma文档中所示):

files: [
  'test-main.js',
  ...
]

如果您通过在files中列出RequireJS来加载它,则需要在RequireJS之后添加test-main.js