Karma / Jasmine - 测试文件未在Base中加载,模块未定义

时间:2015-01-29 00:51:21

标签: jasmine karma-runner karma-jasmine karma-requirejs

我和Karma / Jasmine度过了一段难关。我只想尝试运行Jasmine网站上的示例规范。

当我在命令行上运行jasmine时,测试运行正常。但是,如果我尝试使用Karma测试运行器运行它们,我会遇到很多问题。

这是我的文件结构

Here's my file structure

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

module.exports = function(config) {
config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine', 'requirejs'],


    // list of files / patterns to load in the browser
    files: [
        'node_modules/requirejs/require.js',
        '**/test-main.js', {
            pattern: 'spec/jasmine_examples/*.js',
            included: false
        }
    ],


    // list of files to exclude
    exclude: ['**/*conf.js'],
...port,browser etc.

这是我的test.main.js文件

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

var pathToModule = function(path) {
    return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};

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

require.config({
    // Karma serves files under /base, which is the basePath from your config file
    baseUrl: '/base',

    // dynamically load all test files
    deps: allTestFiles,

    // we have to kickoff jasmine, as it is asynchronous
    callback: window.__karma__.start
});

当我运行karma start时,我得到一个404,即PlayerTest.js和SongTest.js不在base /下。但是它们被加载并位于base / spec / jasmine_examples中。此外,PlayerTest.js会抛出错误"模块未定义"。

老实说,我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你需要在karma.conf.js文件中引用karma-requirejs和karma-jasmine插件 -

config.set({
  plugins: [
    'karma-jasmine',
    'karma-requirejs'
  ],

来自karma doc,它声明:

  

请注意,Karma中的所有框架都需要安装额外的插件/框架库(通过NPM)。   其他信息可以在插件中找到。

您不需要在文件部分中包含require.js.