如何在没有 cypress.json 的情况下配置 cypress-sql-server?

dco*_*ler 3 automated-tests cypress

我正在尝试设置 cypress-sql-server,但我使用的是 10.8.0 版本,它不使用 cypress.json 来配置环境。我发现的所有设置说明都涉及使用 cypress.json 来配置插件。我遇到了一个错误:

tasksqlServer:execute, SELECT 'Bob'
CypressError
cy.task('sqlServer:execute') failed with the following error:

The 'task' event has not been registered in the setupNodeEvents method. You must register it before using cy.task()

Fix this in your setupNodeEvents method here:
D:\git\mcare.automation\client\cypress\cypress.config.jsLearn more
node_modules/cypress-sql-server/src/commands/db.js:7:1
   5 |     }
   6 | 
>  7 |     cy.task('sqlServer:execute', query).then(response => {
     | ^
   8 |       let result = [];
   9 | 
Run Code Online (Sandbox Code Playgroud)

赛普拉斯.config.js

const { defineConfig } = require("cypress");
const sqlServer = require("cypress-sql-server");

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // allows db data to be accessed in tests
      config.db = {
        "userName": "user",
        "password": "pass",
        "server": "myserver",
        "options": {
          "database": "mydb",
          "encrypt": true,
          "rowCollectionOnRequestCompletion": true
        }
      }

      // code from /plugins/index.js
      const tasks = sqlServer.loadDBPlugin(config.db);
      on('task', tasks);

      return config      
      // implement node event listeners here
    },
  },
});
Run Code Online (Sandbox Code Playgroud)

testSQL.spec.js

describe('Testing SQL queries', () => {
    
    it("It should return Bob", () => {
        cy.sqlServer("SELECT 'Bob'").should('eq', 'Bob');
        
});
})
Run Code Online (Sandbox Code Playgroud)

我的版本:

tasksqlServer:execute, SELECT 'Bob'
CypressError
cy.task('sqlServer:execute') failed with the following error:

The 'task' event has not been registered in the setupNodeEvents method. You must register it before using cy.task()

Fix this in your setupNodeEvents method here:
D:\git\mcare.automation\client\cypress\cypress.config.jsLearn more
node_modules/cypress-sql-server/src/commands/db.js:7:1
   5 |     }
   6 | 
>  7 |     cy.task('sqlServer:execute', query).then(response => {
     | ^
   8 |       let result = [];
   9 | 
Run Code Online (Sandbox Code Playgroud)

Fod*_*ody 5

这是Cypress v9cypress-sql-server当前给出的安装指令

插件文件

该插件可以在 cypress/plugins/index.js 文件中初始化,如下所示。

const sqlServer = require('cypress-sql-server');

module.exports = (on, config) => {
  tasks = sqlServer.loadDBPlugin(config.db);
  on('task', tasks);
}
Run Code Online (Sandbox Code Playgroud)

将其转换为Cypress v10+

const { defineConfig } = require('cypress')
const sqlServer = require('cypress-sql-server');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {

      // allows db data to be accessed in tests
      config.db = {
        "userName": "user",
        "password": "pass",
        "server": "myserver",
        "options": {
          "database": "mydb",
          "encrypt": true,
          "rowCollectionOnRequestCompletion": true
        }
      }

      // code from /plugins/index.js
      const tasks = sqlServer.loadDBPlugin(config.db);
      on('task', tasks);

      return config
    },
  },
})
Run Code Online (Sandbox Code Playgroud)

其他变体也有效,例如将该"db": {...}部分放在该部分下方"e2e: {...}",但不在该部分中"env": {...}

自定义命令

赛普拉斯 v9说明

命令文件

该扩展提供了多组命令。您可以导入您需要的。
示例support/index.js文件。

import sqlServer from 'cypress-sql-server';
sqlServer.loadDBCommands(); 
Run Code Online (Sandbox Code Playgroud)

对于赛普拉斯 v10+

只需将此代码移至support/e2e.js