2

我一直在尝试将 jest 设置为我正在处理的使用 Phaser 的项目的测试框架,但我在试图模拟 Phaser 本身时遇到了困难。我首先遇到了缺少画布的问题,我可以通过链接解决这个问题。但现在我收到另一个错误“无法读取未定义的属性'位置'”。

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)

我正在查看该转换文件及其在吸气剂上的爆炸,因为 this.body 未定义:

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

有没有其他人有这个问题?我希望我只是有一些配置错误。

4

1 回答 1

0

我要感谢您分享您的配置以使用 Phaser 3 运行 Jest。

关于您的问题,该Phaser.Physics.Matter.Commponents.Trasnform组件似乎与工作方式并不真正兼容jest.genMockFromModule()

你可以简单地通过为实例的body属性创建一个默认值来破解它:Transformphaser/src/physics/matter-js/components/Trasnform.js

var Transform = {

    body: Body.create({}),

    // ...

虽然我不知道它会如何影响生产代码。

如果您不在游戏中使用 Matter.js 物理引擎,也许您可​​以创建一个自定义 Phaser 3 构建来代替。

于 2020-11-11T09:57:31.930 回答