业力中的茉莉花测试:未捕获的 ReferenceError:需要未定义

IT技术 javascript karma-runner jasmine-node
2021-03-13 07:08:51

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();
        });
    });
})();

参考错误:需要未定义

6个回答

当我尝试require('module_name')在测试用例中使用(CommonJS 样式module)并使用 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定义,并且测试用例运行成功

Karma-Browserfy 需要安装 browserfy。您首先需要 browserfy,因此运行“npm install --save-dev karma-browserify browserify watchify”将解决无提供程序问题。确保遵循预处理器:使用逗号,以免破坏 karma.conf.js 文件。需要 Watchify 来观察所包含文件的变化。
2021-04-21 07:08:51
即使在将 karma-browserify 加入插件数组后,我也会收到此错误:错误:“框架:浏览器化”没有提供程序!(解决:框架:浏览器)
2021-04-24 07:08:51
记得还要添加插件:[ 'karma-browserify', ... ] 否则,它会抱怨“无法加载“浏览器””,接下来的几个小时你会很沮丧。
2021-05-11 07:08:51
@GreatQuestion 我的救星
2021-05-12 07:08:51
实际上,将这些版本放在 package.json 上,您不需要添加“插件”字段。:D "karma": "^1.7.0", "karma-browserify": "^5.1.1", "karma-chrome-launcher": "^2.2.0", "karma-phantomjs-launcher": " ^1.0.4", "业力茉莉": "^1.1.0",
2021-05-15 07:08:51

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

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

例如改变

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

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

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

为我修复了它,它试图从我的 node_modules 文件夹中获取所有内容
2021-05-12 07:08:51

Karma 是一个测试运行,可以在浏览器中运行您的测试您设置的任何浏览器都不知道 require 功能是什么。

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

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

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

希望这可以帮助。

是的,这没有帮助。我已经在 karma.conf.js 中配置了 require.js 的路径,但仍然出现“require is not defined”的错误
2021-04-28 07:08:51
requirejs 与节点的 require 函数不同。看起来您可以将 requirejs 设置为在服务器和客户端(浏览器)上工作,但需要更多的设置,然后将其添加到路径中。
2021-04-29 07:08:51

我今天遇到了类似的问题。就我而言,解决方案非常简单。我通过 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。

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