【问题标题】:Cypress task undefined even though the promise is returned即使返回了承诺,赛普拉斯任务也未定义
【发布时间】:2021-01-22 14:41:01
【问题描述】:

我将 TypeScript 和 Cypress 框架用于自动化目的。为了从 SQL Server 中检索数据,我尝试使用 Cypress sql server,但这仅在 JavaScript 中可用,因为我使用 JavaScript MSSQL 库来检索 plugin/index.js 下的值,然后在所需的 TypeScript 中调用该函数文件。但它在检索过程中将错误作为 undefined value 抛出,即使我处理了承诺。但是查询输出在控制台中打印成功(附下图)

我尝试了与 MYSQL 相同的方法,但在 MSSQL 中它失败了。是什么原因,我在这里想念什么吗?我在下面分享了试验和信息:

plugin/index.js

var mssql = require('mssql');

module.exports = (on, config) => {      
  on('task', {
    'createMSSQLConnection'(query) {
      var res = odsQueryDB(query)
      console.log(res)
      return res
    }
  });

function odsQueryDB(query) {
    return new Promise((resolve, reject) => {
      mssql.connect(db.ods,function(err){       
      if(err){ console.log(err) }
      var sqlServerRequest = new mssql.Request();
      sqlServerRequest.query(query, (error, recordset) => {
        if(error)  
          return reject(error)
        mssql.close();      
        console.log(recordset[0])
        return resolve(recordset)
       })
      })
    })
  }   
};

database.ts

class DBConnectionManager {

  getODSValueFromDB(){
      const query = `SELECT TOP(1) FIELD FROM TABLE`;
      cy.task('createMSSQLConnection',query).then(function (recordset:any) {
        if(recordset.length<1){
          throw new Error("There are no values in the results. Check the database data!")
        }
        let rec:any = recordset
        const results:any = Object.values(rec[0])
        cy.log(''+results[0])
   })
}

控制台输出:

【问题讨论】:

    标签: javascript sql-server database typescript cypress


    【解决方案1】:

    回调的全部意义在于您不必再返回值,只需调用回调,将所需的信息作为参数提供。

    所以,改变这一行:

    return resolve(recordset)
    

    改为:

    resolve(recordset);
    

    它应该可以正常工作。

    【讨论】:

    • 我尝试了上述更改,但仍然存在相同的问题
    • here以上的详细信息
    【解决方案2】:

    问题在于数据检索过程中的 database.ts。记录集是一个数组,JSON格式如下。

    database.ts 中的以下更改有效

    class DBConnectionManager {
    
      getODSValueFromDB(){
    
        const query = `SELECT TOP(1) FIELD FROM TABLE`;
    
        cy.task('createMSSQLConnection',query).then(function (recordset:any) {
        if(recordset.length<1){
          throw new Error("There are no values in the results. Check the database data!")
        }
        else{
         //The below one is the modified one for the data retrieval
         cy.log(recordset['recordset'][0].FIELDNAME)  
        }
      })
    }
    

    代码更改后 Cypress 仪表板中的输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-14
      • 2020-03-17
      • 2023-01-16
      • 2022-07-22
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多