在WebStorm中使用Karma

时间:2016-07-21 02:16:13

标签: webstorm commonjs

这是新手问题,但我无法在StackOverflow上找到答案。

我正在尝试在Webstorm中使用Karma。在我的Spec文件中,我试图要求 依赖文件,但'require'本身没有定义!

它在webstorm控制下的Chrome中运行。这是我的Karma.conf.js文件和我的Spec.js文件。

基本问题是'define','require'和'requirejs'都是UNDEFINED。那我怎么能包括其中任何一个?!

karma.conf.js

// Karma configuration
// Generated on Tue Jul 19 2016 23:26:58 GMT-0700 (PDT)

requirejs = require('requirejs');
requirejs(["node-and-require"]);
requirejs("/ob/proj/uniformjs/main");



module.exports = function(config) {


  requirejs("/ob/proj/uniformjs/main");

  config.set({

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


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


    // list of files / patterns to load in the browser
    files: [
      'spec/**/*Spec.js'
    ],


    // list of files to exclude
    exclude: [
    ],


    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },


    // spec results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],


    // web server port
    port: 9876,


    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: false,


    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'],


    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity
  })
}

lexcore / SimpleUnitSpec.js

describe("A Unit", function () {
    var u;    // The unit being tested
    beforeEach(function(){
        var requirejs = require("requirejs");
        var SimpleUnit = requirejs("lexcore/SimpleUnit");
        u = SimpleUnit();
    });


    it("to be created and defined", function(){
        expect(u).toBeTruthy();
    });
});

生成此错误:

ReferenceError: require is not defined
    at Suite.<anonymous> (....

2 个答案:

答案 0 :(得分:1)

这是因为浏览器/客户端JavaScript中不存在require()。

您有三种选择:

使用标签。 使用CommmonJS实现。像Node.js这样的同步依赖 使用AMD实现。

npm install requirejs

此选项将安装最新版本。 下载r.js

如果你不想使用npm,你可以直接获得r.js:

download page下载r.js并将其放入您的项目中。 从r.js repo获取源代码,并通过“node dist.js”生成r.js,或者从dist目录中获取快照。

用法

这些说明假定npm安装'requirejs'。如果直接使用r.js文件,请将require('requirejs')替换为require('。/ path / to / r.js')。 基本用法是:require('requirejs') 将配置中的主要js文件的“require”函数传递给requirejs。

示例:

var requirejs = require('requirejs');

requirejs.config({
//Pass the top-level main.js/index.js require
//function to requirejs so that node modules
//are loaded relative to the top-level JS file.
nodeRequire: require

});

requirejs(['foo', 'bar'],
function   (foo,   bar) {
//foo and bar are loaded according to requirejs
//config, but if not found, then node's require
//is used to load the module.
});

答案 1 :(得分:0)

我认为Thennarasan的答案可能有效,所以我选择了它。

但这是我如何设法解决自己的问题:

(1)在karma init运行期间,我指定使用requirejs (2)我重构了我的代码以使用requirejs格式

正在发挥作用的问题是“需要&#39;在浏览器中不存在 并且Karma将您的节点代码注入浏览器。