2013-10-01 70 views
37

Karma无法识别JSFileSpec.js文件中的'require'语句。运行karma.conf.js:业务中的茉莉花测试:Uncaught ReferenceError:require未定义

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

的ReferenceError:要求没有定义

+1

我在这里着手寻找一个** gulp **解决方案,在'karma.conf.js'中添加'框架:['jasmine','requirejs']'似乎解决了它 – ecoologic

回答

6

噶是运行你的测试在浏览器一个测试运行。无论您设置哪种浏览器,都不知道需求功能是什么。

要在节点上使用jasmine,请尝试使用jasmine-node。 https://github.com/mhevery/jasmine-node

要有业力运行茉莉花节点测试,请尝试(等待它....)茉莉花节点 - 业力。 https://npmjs.org/package/jasmine-node-karma

这里是茉莉花维基页面,我找到了上述信息。 https://github.com/pivotal/jasmine/wiki

希望这会有所帮助。

+4

是啊没有帮助。我已经在karma.conf.js中配置了require.js的路径,并且它仍然出现“require is not defined”的错误 – FlavorScape

+0

requirejs与节点require的功能不同。它看起来像你可以设置requirejs在服务器和客户端(浏览器)上工作,但它需要更多的设置,然后将其添加到路径。 – Dave

21

您可能正在使用正在拾取karma bin目录内的东西的glob模式。尝试通过使用绝对路径执行测试,看看是否修复了它。

如果是这样,那么你知道你的glob模式是抓住你不想要的东西。

例如改变

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

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

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

+1

修正了它对我来说,它试图抓住我的node_modules文件夹中的所有内容 – dwbartz

42

当试图在测试用例中使用require('module_name')(CommonJS样式模块)并使用Karma运行时,我面临同样的问题。

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

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

更新karma.conf.js

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

这些变化browserified文件是在浏览器通过噶运行,其中require被定义后安装果报browserify,和测试用例运行成功

+2

甚至在将karma-browserify放到插件数组后,我得到这个错误:错误:没有提供“framework:browserify”! (解决:框架:browserify) – user6123723

+6

Karma-Browserfy需要安装browserfy。您首先需要浏览器,因此运行“npm install --save-dev karma-browserify browserify watchify”将修复无提供商问题。请确保遵循预处理器:使用逗号,因此不会破坏您的karma.conf.js文件。 Watchify需要监视正在包含的文件的变化。 – otterslide

+0

尝试了这篇文章中的所有建议和witchify命令,他们都完成了没有错误,但无法摆脱require-is-not-defined错误 –

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通过代码通天编译,以便它可以在浏览器中运行。如果有人需要,我可以复制并粘贴整个webpack.config.js和karma.config.js。

0

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

-1

如果有人仍然无法通过上述解决方案解决问题,这就是对我的帮助。 yarn add browserify and watchify