如何使用Jasmine测试Phaser 3项目?

3

我目前正在使用phaser.js框架开发一个小游戏,由于项目范围相当大,因此我非常想使用单元测试。

然而,在尝试为Phaser设置Jasmine单元测试时,我遇到了有关依赖项的错误。

我没有使用过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依赖于在浏览器中运行,当我运行它时,它会抱怨无法访问诸如windowdocument等元素。
我遇到了以下错误:

ReferenceError: document is not defined

有人有测试Phaser游戏的经验吗?我似乎找不到任何在线信息。测试Phaser游戏是否可能?
至于其他测试框架,我也研究了nightwatch,但它的Phaser支持已过时,而且主要是端到端测试而不是单元测试,所以不符合我的需求。我还发现网上有人开发了一个Phaser 2.4.7的shimming版本,但这已经过时了,因为Phaser 3已经发生了很多变化。

可能是 https://dev59.com/xKDha4cB1Zd3GeqP_Spm 和 https://stackoverflow.com/q/19320422/11912 的重复问题。 - James Skemp
最近我发现Phaser.Game可以使用Phaser.HEADLESS类型创建,其描述中包含“...此模式适用于单元测试...”。 在尝试正确回答之前,我在这里放置了这个评论。 - Davide Pedron
1个回答

6

好的,我做到了!

这只是最基本的内容,但是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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接