Я не привык к javascript или node.js. Это моя первая попытка отнестись к этому серьезно, так как мой работодатель попросил меня об этом. Кстати, вот мой код:
//meta-dao.js
class MetaDAO {
async getAll() {
return await Meta.find().exec()
}
async getByCatalogId(catalogId) {
return await Meta.find().where(catalogId).in('catalogs').exec()
}
async getById(id) {
return await Meta.findOne({ id }).exec()
}
async add(meta) {
return await (new Meta(meta)).save()
}
async update(meta) {
return await Meta.update({ id: meta.id }, meta).exec()
}
async upsert(meta) {
var exists = await this.getById(meta.id)
console.log(exists)
if(!exists){
return await this.add(meta)
}
else {
return await this.update(meta)
}
}
}
//meta-dao.test.js
it('Should insert when upsert a meta with new id', async () => {
metaDAO.getById = jest.fn((id) => {
return Promise.resolve(meta)
})
metaDAO.getById.bind(metaDAO)
metaDAO.upsert(meta)
expect(metaDAO.add).toBeCalledTimes(1)
expect(metaDAO.add).toBeCalledWith(meta)
expect(metaDAO.getById).toBeCalledTimes(1)
expect(metaDAO.getById).toBeCalledWith(meta.id)
expect(metaDAO.update).not.toBeCalled()
})
it('Should update when upsert a meta with known id', async () => {
metaDAO.getById = jest.fn((id) => {
return Promise.resolve(null)
})
metaDAO.getById.bind(metaDAO)
metaDAO.upsert(meta)
expect(metaDAO.update).toBeCalledTimes(1)
expect(metaDAO.update).toBeCalledWith(meta)
expect(metaDAO.getById).toBeCalledTimes(1)
expect(metaDAO.getById).toBeCalledWith(meta.id)
expect(metaDAO.add).not.toBeCalled()
})
Все утверждения из второго теста пройдены. Но expect(metaDAO.add).toBeCalledTimes(1)
из первого контрольного примера не удается. В console.log выводится «null», и я уже пытался использовать:
if(exists == null)
if(exists === null)
if(exists == undefined)
if(exists === undefined)
if(exists)
Кажется, это не имеет никакого значения. Поведение:
- Обновление вызывается, если существует не ноль
- Ничего не вызывается, если существует ноль
Что я делаю неправильно? Я что-то упустил?