Как выполнить модульное тестирование маршрутов базы данных my-sql в экспрессе - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь выполнить модульное тестирование моих 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, но я не нашел никакого полезного контента.

Любая помощь будет оценена, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...