48

Karma 无法识别 JSFileSpec.js 文件中的“require”语句。运行 karma.conf.js:

(function() {
    describe("DummyEmitter creation", function(){
        return it("creation", function(){
            var DummyEmitter = require('Util.DummyEmitter');
            var dummy = new DummyEmitter('someName');
            return expect(dummy).toBeDefined();
        });
    });
})();

ReferenceError:未定义要求

4

7 回答 7

51

当我尝试require('module_name')在测试用例中使用(CommonJS 样式模块)并使用 Karma 运行它时,我遇到了同样的问题。

原因是require浏览器无法使用功能(它是undefined)。为了将它提供给浏览器,我们可以在 Karma 使用karma-browserify在浏览器中运行测试用例之前浏览测试 js 文件。

安装 karma-browserify 使用npm install karma-browserify --save-dev

更新karma.conf.js

 frameworks: ['jasmine', 'browserify'],
 preprocessors: {
    'app/tests/*.js': [ 'browserify' ]
 },
 plugins: [..., 'karma-browserify'],

在这些更改之后,浏览器化的文件由 Karma 在浏览器中运行,其中require定义了,并且测试用例成功运行

于 2015-06-11T13:06:52.863 回答
24

您可能正在使用一种 glob 模式,该模式正在 karma 的 bin 目录中获取内容。尝试使用绝对路径来执行测试,看看是否可以修复它。

如果是这样,那么您知道您的 glob 模式正在抓取您不想要的东西。

例如改变

{pattern: '**/**/*_test.js'},

{pattern: 'stuff/dashboard/home-page_test.js'},

看看这是否能解决您的问题。

于 2014-11-11T19:27:30.283 回答
7

Karma 是一个测试运行器,可以在浏览器中运行您的测试。无论您设置什么浏览器都不知道 require 函数是什么。

要将 jasmine 与节点一起使用,请尝试 jasmine-node。https://github.com/mhevery/jasmine-node

要让 karma 运行 jasmine 节点测试,请尝试(等待......)jasmine-node-karma。https://npmjs.org/package/jasmine-node-karma

这是我找到上述信息的 jasmine wiki 页面。 https://github.com/pivotal/jasmine/wiki

希望这可以帮助。

于 2013-11-12T03:16:51.410 回答
2

我今天遇到了类似的问题。就我而言,解决方案非常简单。我通过 Webpack 使用 Babel 来处理 .jsx 文件。带有 .jsx 扩展名的文件确实测试成功,而简单的 .js 文件引发了引用错误。

如果有人有类似或等效的设置,他们可能能够共享相同的解决方案。

在 karma.config.js 中,我必须为 .js 文件指定预处理器,就像为 .jsx 文件所做的那样。这是一个例子:

preprocessors: {
  "app/tests/**/*.test.jsx": ["webpack", "sourcemap"],
  "app/tests/**/*.test.js": ["webpack", "sourcemap"]
},

我最好补充一点,在我的例子中,Webpack 将代码传递给 Babel 进行编译,以便它可以在浏览器中运行。如果有人需要,我可以复制并粘贴整个 webpack.config.js 和 karma.config.js。

于 2016-12-25T17:42:40.813 回答
0

如果有人仍然无法解决上述解决方案,这对我有帮助。yarn 添加 browserify 和 watchify

于 2017-08-09T21:14:06.107 回答
0

我为此使用 webpack。我在 npm 上发布了我的配置,以便为未来的项目节省时间。只需运行npm install webpack-karma-jasmine,并按照文档中的说明为 webpack 和 karma 创建配置文件:https ://www.npmjs.com/package/webpack-karma-jasmine

于 2017-07-31T18:08:42.683 回答
-1
  module.exports = function(config) {
    config.set({

      basePath: '',


      frameworks: ['mocha', 'chai'],

      files: [
        'test/*.test.js'
      ],

      exclude: [
      ],

      preprocessors: {
        'test/*.test.js': ['webpack']
      },

      webpack: {
        mode: "none",
        module: {
          rules: [
            { test: /\.js?$/, loader: "babel-loader",  options: { presets: ["env"] }, }
          ]
        }
      },

      reporters: ['progress'],

      port: 9876,

      colors: true,

      logLevel: config.LOG_INFO,

      autoWatch: true,

      browsers: ['Chrome'],

      singleRun: false,

      concurrency: Infinity,

      browserNoActivityTimeout: 100000
    })
  }

使用 webpack

于 2018-08-12T13:57:02.657 回答