多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
3.9 KiB

/// <reference types="cypress" />
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
const { rmdir } = require("fs");
// https://stackoverflow.com/questions/61934443/read-excel-files-in-cypress
const readXlsx = require("./read-xlsx");
/**
* @type {Cypress.PluginConfig}
*/
// eslint-disable-next-line no-unused-vars
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
// register utility tasks to read and parse Excel files
on("task", {
deleteFolder(folderName) {
console.log("deleting folder %s", folderName);
return new Promise((resolve, reject) => {
rmdir(
folderName,
{ maxRetries: 10, recursive: true },
(err) => {
if (err) {
console.error(err);
return reject(err);
}
resolve(null);
}
);
});
},
readXlsx: readXlsx.read,
readSheetList: readXlsx.sheetList,
log(message) {
console.log(`##Cypress>> ${message}`);
return null;
},
queryDb: (query) => {
return queryTestDb(query, config);
},
sqliteExec: (query) => {
_sqliteExec(query);
return null;
},
pgExec: (query) => {
_pgExec(query);
return null;
},
});
};
// mysql connection
// https://gist.github.com/fityanos/0a345e9e9de498b6c629f78e6b2835f5
const mysql = require("mysql2");
function queryTestDb(query, config) {
// creates a new mysql connection using credentials from cypress.json env's
const connection = mysql.createConnection(config.env.db);
// start connection to db
connection.connect();
// exec query + disconnect to db as a Promise
return new Promise((resolve, reject) => {
connection.query(query, (error, results) => {
if (error) reject(error);
else {
connection.end();
// console.log(results)
return resolve(results);
}
});
});
}
// sqlite connection
const sqlite3 = require("sqlite3").verbose();
function _sqliteExec(query) {
// open the database
console.log("Current directory: " + process.cwd());
let db = new sqlite3.Database(
"./scripts/cypress/fixtures/sqlite-sakila/sakila.db",
sqlite3.OPEN_READWRITE,
(err) => {
if (err) {
console.error(err.message);
} else {
console.log("Connected to the noco xcdb database.");
}
}
);
db.serialize(() => {
db.run(query);
});
db.close((err) => {
if (err) {
console.error(err.message);
} else {
console.log("Close the database connection.");
}
});
}
// pg connection
const { Pool, Client } = require("pg");
const pg_credentials = {
user: "postgres",
host: "localhost",
database: "postgres",
password: "password",
port: 5432,
};
function _pgExec(query) {
// open pg client connection
const client = new Client(pg_credentials);
client.connect();
// query & terminate
client.query(query, (err, res) => {
console.log(err, res);
client.end();
});
}