如何使用Jasmine测试Phaser3项目?

如何使用Jasmine测试Phaser3项目?,jasmine,phaser-framework,Jasmine,Phaser Framework,我目前正在phaser.js框架中开发一个小游戏,由于项目的范围相当大,我真的很想使用单元测试。 然而,当试图在Jasmine中为Phaser设置单元测试时,我遇到了关于依赖项的错误 我对Jasmine或任何其他测试框架都没有经验,所以我可能忽略了一些对有经验的开发人员来说显而易见的东西 我的.spec文件如下所示: describe("motorMain", function() { var Phaser = require('../phaser'); var MotorMai

我目前正在phaser.js框架中开发一个小游戏,由于项目的范围相当大,我真的很想使用单元测试。 然而,当试图在Jasmine中为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
等元素

我会遇到如下错误:

引用错误:未定义文档

有没有人有过测试移相器游戏的经验?我似乎在网上找不到关于它的任何信息。甚至可以测试移相器游戏吗


至于其他测试框架,我也研究了nightwatch,但它的Phaser支持已经过时,而且它主要是e2e而不是单元测试,所以它不是我想要的。我也在网上看到有人开发了Phaser 2.4.7的一个新版本,但现在已经过时了,因为Phaser 3已经发生了很大的变化。

好的,我已经找到了工作

这是最小值,但相位器可以在没有错误的情况下实例化

package.json

{
“脚本”:{
“测试”:“jasmine--config=jasmine.json”
},
“依赖性”:{
“画布”:“^2.8.0”,
“茉莉花”:“^3.7.0”,
“jsdom”:“^16.6.0”,
“jsdom全局”:“^3.0.2”
},
“依赖项”:{
“相位器”:“^3.55.2”
}
}
jasmine.json

{
“spec_dir”:“spec”,
“规范文件”:[
“***[sS]pec.js”
]
}
spec/Phaser.spec.js

require('canvas');
require('jsdom-global')();
常数相位器=需要(“相位器”);
描述(“套件”,功能(){
它(“实例化一个Phaser.Game”,函数(){
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.

我最近发现,Phaser.Game可以使用Phaser.HEADLESS类型创建,在描述中有“…此模式用于单元测试…”。在试图正确回答之前,我把这句话放在这里。