Я пытаюсь выполнить модульное тестирование моих api nodejs rest, но из-за того, что почти все мои маршруты являются вызовами к моей базе данных my-sql, я нахожу это очень трудным.Я искал, возможно, насмешливую или заглушающую мою базу данных, но у меня был небольшой успех (пытался использовать Sinon).Я определенно не хочу делать реальные вызовы базы данных в тестах, поэтому я чувствую, что заглушка / издевательство - мой единственный вариант, так как я не вижу никакой документации по настройке тестовой базы данных my-sql в документации npm my-sql,
Моя база данных находится в отдельном файле server.js:
const mysql = require('mysql')
function getConnection() {
return pool
}
module.exports = {
connection: getConnection
}
const pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: '',
database: '',
port: 3306,
multipleStatements: true,
})
Мой основной файл app.js обрабатывает все маршруты:
const authentication = require('./routes/authentication.js')
const classes = require('./routes/class.js')
const cloudAnchors = require('./routes/cloudAnchors.js')
const assignments = require('./routes/assignments.js')
const assignmentSubmission = require('./routes/assignmentSubmission.js')
const models = require('./routes/models.js')
const webAppAuth = require('./routes/webAppAuth.js')
app.use(authentication)
app.use(classes)
app.use(cloudAnchors)
app.use(assignments)
app.use(assignmentSubmission)
app.use(models)
app.use(webAppAuth)
app.get("/", (req, res) => {
console.log("Responding to root route")
res.send("This is the root route...")
})
const PORT = process.env.PORT || 3003
app.listen(PORT, () => {
console.log("Server is up and running...")
})
Если мы используем аутентификацию.js, например, содержит следующий маршрут и экспортирует маршрутизатор в app.js для использования:
router.post('/registerTeacher', (req, res) => {
console.log("Trying to register a new teacher...")
const email = req.body.email
const type = req.body.type
const name = req.body.name
const hashedPassword = passwordHash.generate(req.body.password)
console.log(hashedPassword)
const queryString = "INSERT INTO users (name, email, password, type) VALUES (?, ?, ?, ?); INSERT INTO teacher (userId) VALUES (last_insert_id());"
server.connection().query(queryString, [name, email, hashedPassword, type], (err, results, fields) => {
if (err) {
console.log("Failed to insert new student: " + err)
res.send({
"code":500,
"success":"registration failed"
});
return
}
res.send({
"code":200,
"success":"registration sucessfull",
});
})
})
module.exports = router
Мне интересно, как мне лучше всего справиться с базой данных, чтобы иметь возможность тестировать маршруты по отдельности,Я с радостью называю маршрут, возвращаю фиктивный ответ из смоделированной / заглушенной базы данных и проверяю его, но я просто пытаюсь понять, как его реализовать.Кажется, есть намного больше информации о заглушке / насмешливых базах данных mongoose, но я не нашел никакого полезного контента.
Любая помощь будет оценена, спасибо.