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

时间:2019-04-15 13:19:40

标签: jasmine phaser-framework

我目前正在使用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中访问windowdocument之类的元素。

我收到如下错误:

  

ReferenceError:未定义文档

有人有测试Phaser游戏的经验吗?我似乎无法在线找到任何信息。甚至可以测试移相游戏吗?

对于其他测试框架,我也研究了守夜,但是它对Phaser的支持已经过时了,它主要是e2e而不是单元测试,所以这不是我想要的。我还在线上看到有人开发了一个相位调整器2.4.7,但是现在已经过时了,因为相位调整器3发生了很大的变化。

1 个答案:

答案 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.