Sequelize w / Postgres测试异步错误

时间:2017-10-21 22:43:30

标签: node.js postgresql asynchronous sequelize.js jestjs

我一直在用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:relation" Users"不存在"。此外,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);
  });
});

我唯一的猜测是,因为构建实际上没有保存到数据库,所以它会及时返回Jest进行断言的值。所以我的直觉是使用promises来处理异步性质(同样,我检查了Jest文档)。但它仍然会抛出这个错误,似乎在Sequelize完成从Postgres数据库获取数据之前返回了承诺。如果有人能够解释我遇到的这个问题,我真的很感激!

1 个答案:

答案 0 :(得分:0)

有点晚了,但是降落在这里之后我刚刚解决了一些非常相似的问题!这可能是环境问题。当您运行测试套件时,玩笑将寻找与test环境有关的数据库,而不再是dev环境。 就我而言,我使用的是postgres和knex,而不同的env配置位于knexFile中。我可以想象续集是相似的! 寻找它的方法是运行psql myDBinWhateverEnv并查看您是否具有“用户”关系