【问题标题】:how to fix the promise pending in cucumber NodeJS如何修复黄瓜 NodeJS 中未决的承诺
【发布时间】:2021-06-18 17:56:38
【问题描述】:

我正在编写黄瓜测试,并期待来自此函数 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)
            }
          });

        });
    });
  })
}

任何帮助将不胜感激解决这个问题。提前致谢!

【问题讨论】:

    标签: javascript node.js cucumber


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我的错,我更新了代码,但我得到的值结果是“未定义”而不是“真” - 帖子已更新为最新的。如何在这里使用 promise 回调 - 抱歉,我是 java 脚本的新手。谢谢!
    • 它给你undefined 因为result 没有在getOutout 的范围内定义。此外,为了使您的测试用例正常工作,您需要从getOutout 返回isSuccess。 @戴夫布雷迪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多