Я пытаюсь протестировать слой доступа к данным mysqlite3, но мне кажется, что я не могу правильно заглушить мой метод db.all (), я не уверен, связано ли это с тем, как передается моя база данных, или я неправильно его заглушаю.
Это мой файл базы данных:
const db = new sqlite3.Database(path.join(__dirname, '
../database/example.db'), (err) => {
if (err) return console.log(err.message)
console.log('Connected to the database')
})
module.exports.database = db
Это моя функция, которую я пытаюсь заглушить:
const db = require('./database.js').database
module.exports.selectMultiple = request => {
//unimportant code
return new Promise((resolve, reject) => {
db.all(sql, (err, rows) => {
if (err)
reject(err)
else {
resolve('blah blah blah')
})
})
}
Это моя попытка, которую я не могукажется, работает:
const db = require('../../data_access/database.js').database
describe('select multiple', () => {
beforeEach(() => {
const testProduct2 = JSON.parse(JSON.stringify(testProduct))
testProduct2['key'] = '2'
this.multiple = sinon.stub(db, 'all')
.resolves([testProduct, testProduct2])
})
afterEach(() => {
this.multiple.restore()
})
test('select 2 products', async(done) => {
expect.assertions(2)
const macbooks = await productDb.selectMultiple({amount: 2})
expect(macbooks.length === 2).toBe(true)
expect(macbooks[0].key !== macbooks[1].key).toBe(true)
done()
})
})
Если я запускаю это, тайм-аут блока асинхронного теста.Кто-нибудь знает, как я должен это заглушить?
Спасибо!