用玩笑嘲笑Phaser

时间:2020-01-02 17:17:06

标签: jestjs phaser-framework ts-jest

我一直在尝试将jest设置为我正在使用Phaser的项目的测试框架,而试图模拟Phaser本身却陷入困境。我首先遇到缺少画布的this issue,可以从链接中解决该问题。但是现在我又遇到了另一个错误“无法读取未定义的属性'位置'”。

jest.config.js:

module.exports = {
  verbose: true,
  roots: ['./src'],
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
  moduleNameMapper: {
    '\\.(css|less|scss)$': 'identity-obj-proxy'
  },
  setupFiles: ['jest-canvas-mock']
}

__ mocks __ / phaser.js:

const phaser = jest.genMockFromModule('phaser');

module.exports = phaser;

错误消息:

TypeError: Cannot read property 'position' of undefined

      1 | 
    > 2 | const phaser = jest.genMockFromModule('phaser');
        |                     ^
      3 | 
      4 | module.exports = phaser;

      at Image.get [as x] (node_modules/phaser/src/physics/matter-js/components/Transform.js:36:30)
          at Array.forEach (<anonymous>)
          at Array.forEach (<anonymous>)
          at Array.forEach (<anonymous>)
          at Array.forEach (<anonymous>)
          at Array.forEach (<anonymous>)
      at Object.<anonymous> (src/__mocks__/phaser.js:2:21)
      at Object.<anonymous> (src/main.ts:3:1)
      at Object.<anonymous> (src/main.spec.ts:3:1)

我正在查看该Transform文件及其在getter上的爆炸,因为this.body未定义:

get: function ()
{
  return this.body.position.x;
},

还有其他人有这个问题吗?我希望我的配置有误。

1 个答案:

答案 0 :(得分:0)

我想感谢您分享与Phaser 3一起运行Jest的配置。

关于您的问题,看来Phaser.Physics.Matter.Commponents.Trasnform组件与jest.genMockFromModule()的工作方式确实不兼容。

您只需在body中为Transform实例的phaser/src/physics/matter-js/components/Trasnform.js属性的默认值创建默认值即可破解它:

var Transform = {

    body: Body.create({}),

    // ...

尽管我不知道它如何影响生产代码。

如果您在游戏中不使用Matter.js物理引擎,则可以改为创建custom Phaser 3 build