我目前正在使用phaser.js框架开发一个迷你游戏,并且由于该项目的范围很大,所以我真的想使用单元测试。 但是,当尝试在Jasmine for Phaser中设置单元测试时,我遇到了有关依赖项的错误。
我没有使用Jasmine或任何其他测试框架的经验,所以我可能忽略了对有经验的开发人员显而易见的内容。
我的.spec文件如下所示:
describe("motorMain", function() {
var Phaser = require('../phaser');
var MotorMain = require("../motorMain");
var motorMain;
var phaser;
beforeEach(function() {
phaser = new Phaser();
motorMain = new motorMain();
});
it("should increase the score if a object is clicked", function(){
var scoreBeforeClicking = motorMain.score;
var gameobject;
motorMain.clickhandler("",gameobject);
expect(scoreBeforeClicking+1).toEqual(score);
})
});
但是,由于Phaser依赖于在浏览器中运行,因此在运行此程序时,它抱怨无法在Phaser中访问window
和document
之类的元素。
我收到如下错误:
ReferenceError:未定义文档
有人有测试Phaser游戏的经验吗?我似乎无法在线找到任何信息。甚至可以测试移相游戏吗?
对于其他测试框架,我也研究了守夜,但是它对Phaser的支持已经过时了,它主要是e2e而不是单元测试,所以这不是我想要的。我还在线上看到有人开发了一个相位调整器2.4.7,但是现在已经过时了,因为相位调整器3发生了很大的变化。
答案 0 :(得分:2)
好的,我有一些工作!
这是最低要求,但 Phaser 可以被实例化而不会出错。
package.json
{
"scripts": {
"test": "jasmine --config=jasmine.json"
},
"devDependencies": {
"canvas": "^2.8.0",
"jasmine": "^3.7.0",
"jsdom": "^16.6.0",
"jsdom-global": "^3.0.2"
},
"dependencies": {
"phaser": "^3.55.2"
}
}
jasmine.json
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.js"
]
}
spec/Phaser.Spec.js
require('canvas');
require('jsdom-global')();
const Phaser = require("phaser");
describe("A suite", function () {
it("Instantiate a Phaser.Game", function () {
let game = new Phaser.Game({ type: Phaser.HEADLESS });
expect(game).not.toBe(null);
})
})
控制台输出为:
$ jasmine --config=jasmine.json
Randomized with seed 06585
Started
Phaser v3.55.2-FB (Headless | HTML5 Audio) https://phaser.io
.
1 spec, 0 failures
Finished in 0.016 seconds
Randomized with seed 06585 (jasmine --random=true --seed=06585)
✨ Done in 1.28s.