Sequelize w/Postgres 测试异步错误
Posted
技术标签:
【中文标题】Sequelize w/Postgres 测试异步错误【英文标题】:Sequelize w/Postgres testing async errors 【发布时间】:2018-04-02 18:55:59 【问题描述】:我一直在使用 Postgres 数据库为 Sequelize 编写单元测试。对于测试,我目前正在使用 Jest。现在,我可以让这段代码工作了:
test('email field only takes valid emails', () =>
expect.assertions(2);
let user = Users.build( email: 'notAProperEmail', password: 'abc123' );
return user.validate().catch(err =>
expect(err).toHaveProperty('errors');
expect(err.errors[0].message).toEqual('Validation isEmail on email failed');
);
)
但由于某种原因,这会引发错误“SequelizeDatabaseError:关系“用户”不存在”。此外,expect 方法也永远不会被命中,因为我得到了预期的断言错误:“预期要调用一个断言,但接收到零个断言调用。”
describe('Password is encrypted', () =>
beforeAll(() =>
Users.create(
email: 'test1@gmail.com',
password: 'testPassword123'
)
);
test('password is not plain text', () =>
expect.assertions(1);
return Users.findOne(where: email: 'test1@gmail.com' ).then(response =>
expect(2).toEqual(2)
console.log('console log here: ', response);
);
);
我唯一的猜测是,因为 build 实际上并没有保存到数据库中,所以它会及时返回一个值,以便 Jest 做出断言。所以我的直觉是使用 Promise 来处理异步性质(另外,我检查了 Jest 文档)。但它仍然会引发此错误,并且似乎在 Sequelize 完成从我的 Postgres 数据库中获取数据之前返回了承诺。如果有人能阐明我遇到的这个问题,我将不胜感激!
【问题讨论】:
【参考方案1】:有点晚了,但我在这里登陆后刚刚解决了一些非常相似的问题!这可能是环境问题。当您运行您的测试套件时,开玩笑将寻找与您的test
环境相关的数据库,而不是您的dev
环境。
在我的情况下,我使用的是 postgres 和 knex,不同的 env 配置在 knexFile 中。我想续集是相似的!
寻找它的方法是运行psql myDBinWhateverEnv
并查看您是否有关系“用户”
【讨论】:
以上是关于Sequelize w/Postgres 测试异步错误的主要内容,如果未能解决你的问题,请参考以下文章
Node + Sequelize:如何在添加之前检查项目是不是存在? (异步混淆)
等待总是抛出 SyntaxError:等待仅在 sequelize 的异步函数中有效 [重复]