繁体   English   中英

function 在赛普拉斯中总是返回未定义的值

[英]function always return undefined value in cypress

这是赛普拉斯测试文件

import { Given, Then } from "cypress-cucumber-preprocessor/steps";
import { quickSignIn } from "../../../support/services/commonServices";
import { storyTableViewResultColumnCheck } from "../../../support/services/calculationStoryService";
    
    
    Given('Logged into the application', () => {
        quickSignIn(Cypress.env('username'), Cypress.env('password'));
    });
    
    Then('navigate to the story', () => {
        storyTableViewResultColumnCheck();
    });

这是 calculationStoryService.js 文件

export function storyTableViewResultColumnCheck() {
        const stories =  getAllCalculationStoriesFromExcel(); // return undefined value
        expect(stories).not.to.be.undefined
        cy.log("method - storyTableViewResultColumnCheck",stories)
    }
    
function getAllCalculationStoriesFromExcel() {
        cy.task("getExcelData", Cypress.env("calculationRelatedStoryPath")).then((stories) => {
            console.log(stories) // in here print all the stories without any issue. 
            return stories;
        });
    }

在“storyTableViewResultColumnCheck”方法中调用“getAllCalculationStoriesFromExcel”方法时,它总是返回未定义的值。 但是在“getAllCalculationStoriesFromExcel”方法中的“ then ”块内的控制台日志将所有故事打印到控制台。

我想知道如何在 cy.task 完成后返回一个值

在此处输入图像描述

您可以添加一个 Promise 包装器以使其工作

export async function storyTableViewResultColumnCheck() {
  const stories = await getAllCalculationStoriesFromExcel(); 
  expect(stories).not.to.be.undefined
  cy.log("method - storyTableViewResultColumnCheck",stories)
}
    
function getAllCalculationStoriesFromExcel() {
  return new Promise(resolve => {
    cy.task("getExcelData", Cypress.env("calculationRelatedStoryPath"))
      .then((stories) => resolve(stories))
  })
}

Cypress 命令是异步的。 所以你不能直接从一个命令返回一个值(包括cy.task一个)。 此外,您的 function 没有返回任何内容,因为它没有声明return语句。 为了同步执行流程,您可以使用then回调:

function getAllCalculationStoriesFromExcel() {
        return cy.task("getExcelData", Cypress.env("calculationRelatedStoryPath")).then((stories) => {
            console.log(stories) // in here print all the stories without any issue. 
            return stories;
        });
    }
export function storyTableViewResultColumnCheck() {
    getAllCalculationStoriesFromExcel().then(stories => {
        expect(stories).not.to.be.undefined
        cy.log("method - storyTableViewResultColumnCheck",stories)
    })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM