我正在尝试使用 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;
}
}
答案 0 :(得分:0)
你可以使用 cy.task
// 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)
}
})
}