我正在尝试使用three.js为项目添加一些测试用例 . 我试图测试的单位使用THREE.Vector3
我设置了一个Gulp任务,用于使用jasmine库进行测试 .
我的gulp文件看起来像这样:
var jasmine = require('gulp-jasmine');
var gulp = require('gulp');
var three = require('../three');
gulp.task('test', function() {
return gulp.src('jasmine.js')
.pipe(jasmine());
});
其中require('../ three')正在加载three.js库 .
现在的问题是我得到了错误:
ReferenceError:未在Object中定义self . (E:\ gamesprogrammierung \ dodecaeder \ Deodecaeder \ three.js:8:1)在Module._compile(module.js:456:26)的Object.Module._extensions..js(module.js:474:10)at at Module.load(module.js:356:32)在Function.Module._load(module.js:312:12)的Module.require(module.js:364:17)at require(module.js:380:17) )在对象 . (E:\ gamesprogrammierung \ dodecaeder \ Deodecaeder \ test \ gulpfile.js:7:13)在Module._compile(module.js:456:26)的Object.Module._extensions..js(module.js:474:10) )
因为gulp文件运行器不是浏览器,所以它显然无法获得对self的引用,它在three.js文件的开头使用 .
var THREE = THREE || { REVISION: '58' };
self.console = self.console || {
info: function () {},
log: function () {},
debug: function () {},
warn: function () {},
error: function () {}
};
在加载three.js之前,我试图覆盖自变量
var self = self || {
console: function () {}
};
但是出现了同样的错误 . 在我看来,需要 Build 自己的上下文,因此定义的自变量不起作用 .
有人知道我怎么能让这个工作?
1 回答
我自己解决了 . 首先我得到了require方法错误 . 这仅适用于加载nodejs模块 . 所以用require加载three.js javascript文件是错误的 . 但是我安装了一个three.js节点模块
然后在gulp文件中使用它
然后还有问题,错误来了,没有定义三个 . 要解决这个问题,我添加了另一行
我通过它向nodejs上下文添加了一个全局变量 .
现在有三个js可用 .
为了让我的测试用例调用我的一个方法,我必须添加到jasmine测试文件中
我的方法在my-utilsThreeJs.js中定义 .
这是我的测试方法:
现在可以正确调用测试用例 .
另一种可能是通过fs.readFileSync(...)加载three.js文件
但是three.js文件需要变量'self'和'window' . 这可能会被覆盖 . var self = {console:function(){}} var window = {requestAnimationFrame:function(){}}
但gulp-jasmine需要将窗口变量定义为未定义才能正常工作 . 这是在minijasminenode / lib / jasmine-version.js中第一行用var isCommonJS定义,
因此,在加载three.js后,您必须将窗口变量设置为undefined,这也应该有效 .