Grunt、Jasmine、Phantom、React 单元测试:React 抛出 ReactElementValidator
Grunt, Jasmine, Phantom, React Unit Testing: React throws on ReactElementValidator
我正在使用 Grunt
到 运行 Jasmine
单元测试 Phantom
。
Grunfile.js
module.exports = function (grunt)
{
"use strict";
grunt.loadNpmTasks('grunt-browserify');
grunt.loadNpmTasks('grunt-karma');
grunt.initConfig(
{
pkg: grunt.file.readJSON('package.json'),
browserify: {
dev: {
files: {
'test-output.js':['src/methods.js']
},
options: {
browserifyOptions: {
debug: true
}
}
}
},
karma:
{
unit:{
configFile:"karma.conf.js"
}
}
});
};
使用这个 Karma
配置文件
module.exports = function(config)
{
config.set({
basePath: '',
frameworks: ['browserify', 'jasmine'],
files: [
'myDir/*.js'
],
exclude: [
],
preprocessors: {
'myDir/*.js':['browserify','reactify']
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ['PhantomJS'],
browserify: {
debug: true,
transform: []
},
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine','karma-bro'],
singleRun: true
});
};
React 作为包安装在本地 node_modules
文件夹中。我可以 grunt browserify
并且一切都按预期捆绑到 test-ouput.js
中,但是当我这样做时 grunt karma
我得到错误:
TypeError: 'undefined' is not a function (evaluating 'ReactElementValidator.createElement.bind
如果我检查 test-ouput.js
文件,我可以看到 ReactElementValidator.createElement.bind
函数在包内。知道是什么原因造成的吗?
这是 phantomJS < 2.0 的已知问题。要解决此问题,只需像这样安装 phantomjs polyfill:
npm install --save-dev phantomjs-polyfill
并像这样将其添加到配置中。
files: [
'node_modules/phantomjs-polyfill/bind-polyfill.js',
'myDir/*.js'
]
希望对您有所帮助。
我正在使用 Grunt
到 运行 Jasmine
单元测试 Phantom
。
Grunfile.js
module.exports = function (grunt)
{
"use strict";
grunt.loadNpmTasks('grunt-browserify');
grunt.loadNpmTasks('grunt-karma');
grunt.initConfig(
{
pkg: grunt.file.readJSON('package.json'),
browserify: {
dev: {
files: {
'test-output.js':['src/methods.js']
},
options: {
browserifyOptions: {
debug: true
}
}
}
},
karma:
{
unit:{
configFile:"karma.conf.js"
}
}
});
};
使用这个 Karma
配置文件
module.exports = function(config)
{
config.set({
basePath: '',
frameworks: ['browserify', 'jasmine'],
files: [
'myDir/*.js'
],
exclude: [
],
preprocessors: {
'myDir/*.js':['browserify','reactify']
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ['PhantomJS'],
browserify: {
debug: true,
transform: []
},
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine','karma-bro'],
singleRun: true
});
};
React 作为包安装在本地 node_modules
文件夹中。我可以 grunt browserify
并且一切都按预期捆绑到 test-ouput.js
中,但是当我这样做时 grunt karma
我得到错误:
TypeError: 'undefined' is not a function (evaluating 'ReactElementValidator.createElement.bind
如果我检查 test-ouput.js
文件,我可以看到 ReactElementValidator.createElement.bind
函数在包内。知道是什么原因造成的吗?
这是 phantomJS < 2.0 的已知问题。要解决此问题,只需像这样安装 phantomjs polyfill:
npm install --save-dev phantomjs-polyfill
并像这样将其添加到配置中。
files: [
'node_modules/phantomjs-polyfill/bind-polyfill.js',
'myDir/*.js'
]
希望对您有所帮助。