如何在 Cypress 中存根数据库查询?

时间:2021-02-05 06:43:26

标签: javascript node.js integration-testing nestjs cypress

我正在尝试使用 Cypress 编写端到端集成测试。该流程涉及查询数据库。我们想要存根数据库调用并返回一个静态 JSON 对象,该对象将测试每个场景。有没有办法让我用 Cypress 做到这一点?

数据库查询方法:

export class myClass {
  constructor(private readonly connector: MssqlConnector) {
    super();
  }

  async myQuery() {
    const pool = await this.connector.getConnectionPool();
    const response = await pool.query(q));

    return response.recordset;
  }
}

1 个答案:

答案 0 :(得分:0)

你可以使用 cy.task

Example : cypress

// in test
const dbName = 'stagingA'
const query = 'SELECT * FROM users'

cy.task('queryDatabase', { dbName, query })



// in plugins/index.js
const mysql = require('mysql')
// the connection strings for different databases could
// come from a config file, or from environment variables
const connections = {
  stagingA: {
    host: 'staging.my.co',
    user: 'test',
    password: '***',
    database: 'users'
  },
  stagingB: {
    host: 'staging-b.my.co',
    user: 'test',
    password: '***',
    database: 'users'
  }
}

// querying the database from Node
function queryDB (connectionInfo, query) {
  const connection = mysql.createConnection(connectionInfo)

  connection.connect()

  return new Promise((resolve, reject) => {
    connection.query(query, (error, results) => {
      if (error) {
        return reject(error)
      }

      connection.end()

      return resolve(results)
    })
  })
}
module.exports = (on, config) => {
  on('task', {
    // destructure the argument into the individual fields
    queryDatabase ({ dbName, query }) {
      const connectionInfo = connections[dbName]

      if (!connectionInfo) {
        throw new Error(`Do not have DB connection under name ${dbName}`)
      }

      return queryDB(connectionInfo, query)
    }
  })
}