使用sequelize-typescript的Sequelize.js出现属性遮蔽警告且单元测试失败
使用sequelize-typescript的Sequelize.js出现属性遮蔽警告且单元测试失败
最近我在一个小型副业项目里用Sequelize 6.37.X版本有段时间了,结果前一两天突然单元测试开始失败,控制台还刷出来一堆这个警告:
(sequelize) Warning: Model "Reference" is declaring public class fields for attribute(s): "name", "language", "referenceTypeId". These class fields are shadowing Sequelize's attribute getters & setters.
折腾半天终于摸清楚问题根源——我在Reference模型里手动声明了和属性同名的public类字段,比如public name: string;这种写法,直接把Sequelize自动生成的属性getter和setter给覆盖了!
这会导致ORM的很多自动逻辑直接失效,比如数据格式转换、属性验证这些核心功能出问题,单元测试自然就跑不起来了。给你几个实用的解决步骤:
- 打开你的
Reference模型文件,删掉那些手动声明的public类字段(就是警告里提到的name、language、referenceTypeId) - 如果你用的是sequelize-typescript,记得所有模型属性都要用装饰器来定义,比如
@Column、@PrimaryKey这类,不需要额外手动声明类字段。Sequelize会自动根据装饰器配置为属性生成对应的getter和setter,不会再出现遮蔽问题 - 改完之后重新跑单元测试,应该就能恢复正常了
备注:内容来源于stack exchange,提问作者rjray
相关产品推荐
相关产品推荐

