如何修复黄瓜 NodeJS 中的未决承诺

时间:2021-06-18 17:56:38

标签: javascript node.js cucumber

我正在编写 Cucumber 测试并期望来自该函数 getOutout 的值 true 并使用返回值执行断言,但我收到以下错误:

错误信息:

AssertionError [ERR_ASSERTION]: undefined == true
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  generatedMessage: true,
  code: 'ERR_ASSERTION',
  actual: undefined,
  expected: true,
  operator: '==',
  [Symbol(originalCallSite)]: [ CallSite {}, CallSite {} ],
  [Symbol(mutatedCallSite)]: [ CallSite {}, CallSite {} ]

step.js

const { Given, When, Then } = require('@cucumber/cucumber');
const AWS = require('aws-sdk');
const assert = require('assert');


let isSuccess;
Then('validate the {string} product', function (productType) {

  var params = {
    stateMachineArn: 'arn:aws:states:us-west-1:121:stateMachine:test',
    maxResults: '25',
    nextToken: null,
    statusFilter: 'SUCCEEDED'
  };

  const result = getOutout(params).then(function() {
     assert.equal(result, true);
    })
  
});


async function getOutout(params) {

  const stepfunctions = new AWS.StepFunctions({
    region: process.env.AWS_REGION
  });

  try {
    isSuccess = await listExecute(params, stepfunctions);
    console.log(isSuccess, 'Output') 
    
  } catch (e) {
    console.log(e)
  }
}

const listExecute = function (params, stepfunctions) {
  return new Promise((resolve, reject) => {
    stepfunctions.listExecutions(params, function (err, data) {
      if (err) reject(err);
      else
        data.executions.forEach(function (result) {
          let params = {
            executionArn: result.executionArn
          };
          stepfunctions.describeExecution(params, function (err, data) {
            if (err) reject(err);
            else {
              resolve(true)
            }
          });

        });
    });
  })
}

如果有任何帮助可以解决问题,我们将不胜感激。提前致谢!

1 个答案:

答案 0 :(得分:0)

不知道你为什么这样做,但这是糟糕的异步代码

const result = getOutout(params).then(function() {
  })
assert.equal(result, true);

您需要将断言放在承诺回调中:

getOutout(params).then(function(result) {
  assert.equal(result, true);
})