我正在努力创造我自己的 bootstrap project .目前我完成了很多事情,但现在我遇到了 ReactJS 组件单元测试的问题。
当我在浏览器中运行应用程序时 - 一切正常。我使用 RequireJS 来延迟加载所需的模块。包装到 RequireJS 模块中的 React 组件和浏览器中的一切都按预期工作。
但是当我尝试对 React 组件进行单元测试时,RequireJs 不会加载 React。 React 是未定义的...
这是 Gruntfile.js ,我在其中创建 karma 任务。
这里是 karma.config.js带有 karma 配置的文件。
这是 test-main.js这是运行测试。
我的测试文件如下所示:
define(['helper/utils', 'underscore', 'components/List'], function(utils, _, List){ describe("First test for example", function() { it("TRUE should be TRUE :)", function() { expect(true).toBe(true); }); it("Test requirejs helper loading", function(){ expect(utils.testJasmine()).toBe("Jasmine"); }); it('Underscore is works', function() { // just checking that _ works expect(_.size([1,2,3])).toEqual(3); }); it('List component is loaded', function(){ expect(List.test()).toBe('List Component'); }); }); });
List
- 这是我的 ReactJS 组件。当我尝试运行我的测试时,我收到了错误结果:
grunt test Running "karma:unit" (karma) task 15 12 2015 15:17:40.813:INFO [karma]: Karma v0.13.15 server started at http://localhost:9876/ 15 12 2015 15:17:40.833:INFO [launcher]: Starting browser PhantomJS 15 12 2015 15:17:42.430:INFO [PhantomJS 1.9.8 (Windows 7 0.0.0)]: Connected on socket uQidvbVxLImPJ1kdAAAA with id 99794753 PhantomJS 1.9.8 (Windows 7 0.0.0) LOG: 'spec/FirstSpec' PhantomJS 1.9.8 (Windows 7 0.0.0) ERROR: TypeError{message: ''undefined' is not a function (evaluating 'RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-] *$/)')', line: 3195, sourceId: 86376736, sourceURL: 'http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a', stack: 'TypeError: 'undefined' is not a function (evaluating 'RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/)') at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:3195 at s (http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4) at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4 at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:8481 at s (http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4) at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4 at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:6100 at s (http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4) at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4 at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:18 at s (http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4) at e (http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:4) at http://localhost:9876/base/bower_components/react/react.js?d1bee606f43f11cbd5eb0e7534d094cd1518306a:18793 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1690 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:865 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1177 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:783 at callGetModule (http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1204) at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1583 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1711', stackArray: [Object{sourceURL: ..., line: ...} , Object{function: ..., sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{function: ..., sourceURL: ..., li ne: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{function: ..., sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ... }, Object{sourceURL: ..., line: ...}, Object{function: ..., sourceURL: ..., line: ...}, Object{function: ..., sourceURL: ..., line: ...}, Object{sourceURL: ..., l ine: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{func tion: ..., sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}]} PhantomJS 1.9.8 (Windows 7 0.0.0) ERROR: TypeError{message: ''undefined' is not an object (evaluating 'React.createClass')', line: 4, sourceId: 86378776, sourceUR L: 'http://localhost:9876/base/scripts/components/List.js?11abba705dd0e6b2d4637e4057531f428d9dcf1c', stack: 'TypeError: 'undefined' is not an object (evaluating ' React.createClass') at http://localhost:9876/base/scripts/components/List.js?11abba705dd0e6b2d4637e4057531f428d9dcf1c:4 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1690 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:865 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1140 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:131 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1190 at each (http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:56) at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1191 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:940 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1177 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:783 at callGetModule (http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1204) at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1583 at http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1711', stackArray: [Object{sourceURL: ..., line: ...} , Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: .. ., line: ...}, Object{function: ..., sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line : ...}, Object{sourceURL: ..., line: ...}, Object{function: ..., sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}, Object{sourceURL: ..., line: ...}] } PhantomJS 1.9.8 (Windows 7 0.0.0) First test for example List component is loaded FAILED TypeError: 'undefined' is not an object (evaluating 'List.test') at c:/Users/dmytro.medvid/sites/evolution/spec/FirstSpec.js:30 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1690 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:865 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1140 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:131 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1190 at each (c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:56) at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1191 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:940 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1140 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:131 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1190 at each (c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:56) at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1191 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:940 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1140 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:131 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1190 at each (c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:56) at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1191 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:940 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1177 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:783 at callGetModule (c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1204) at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1583 at c:/Users/dmytro.medvid/sites/evolution/node_modules/requirejs/require.js:1711 PhantomJS 1.9.8 (Windows 7 0.0.0): Executed 4 of 4 (1 FAILED) (0.007 secs / 0.003 secs) Warning: Task "karma:unit" failed. Use --force to continue. Aborted due to warnings.
最佳答案
ReactJS 与 PhantomJS 有问题 https://github.com/facebook/react/pull/347
这是一个修复:
加载 https://github.com/facebook/react/blob/3dc10749080a460e48bee46d769763ec7191ac76/src/test/phantomjs-shims.js
文件。
将 karma.config.js
添加到 files
'scripts/phantomjs-shims.js',
关于javascript - React 组件在 RequireJS+Jasmine 单元测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290347/