1

我和 Karma/Jasmine 玩得很开心。我只是想从 Jasmine 的网站运行示例规范。

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

这是我的文件结构

这是我的文件结构

这是我的 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 会抛出错误“模块未定义”。

老实说,我做错了什么?

4

1 回答 1

0

我认为您需要参考 karma.conf.js 文件中的 karma-requirejs 和 karma-jasmine 插件 -

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

来自karma doc,它指出:

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

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

于 2015-04-02T23:34:42.820 回答