如何在将函数赋值给 javascript/mocha 中的变量之前等待函数 return 一个值
How to wait for a function to return a value before assigning it to a variable in javascript/mocha
请看我的摩卡测试:
it.only('verify Lot in CFR List',function(done)){
this.timeout(20000);
var data = ui.cfrVerifyLot(); //calling cfrVerifyLot() method from another file
data.then(function(result) {
console.log(result); // 'getting undefined' 'expecting success or failed'
if(result=='success'){
done();
}
});
}
似乎 ui.cfrVerifyLot() 方法在完成自身之前分配返回值。
怎么让它在完全完成之前等待分配结果。
这是我的 cfrVerifyLot() 函数:
cfrVerifyLot:function(){
var result = '';
const rest = require('./restAPI');
const puppeteer = require('puppeteer');
const assert = require('chai').assert;
const cfg = require('../config-env.json');
const objR = require('../obj-repo/obj-c.json');
puppeteer.launch({
//headless:false
}).then(async browser => {
/*
making some UI navigations
*/
try{
const innerText = await page.evaluate(() => document.querySelectorAll('some element name')[1].innerText);
var str = innerText.substring(0,8);
await page.waitFor(2*1000);
if(str===input_lot_number){
result = 'success'
}
}
catch(err){
result = 'failed'
}
finally{
await browser.close();
return result
}
});
},
您可以使用 async
和 await
运算符。
it.only('verify Lot in CFR List',async function(done)){
this.timeout(20000);
var result = await ui.cfrVerifyLot();
console.log(result); // 'getting undefined' 'expecting success or failed'
if(result=='success'){
done();
}
});
}
编辑
你的 cfrVerifyLot
函数 returns
没有价值。相反,result
是 return 从 pupperteer
编辑而来的。将 puperteer's
then 链更改为使用 await
,这样您 return 直接来自函数的 result
值。
cfrVerifyLot:async function(){
var result = '';
const rest = require('./restAPI');
const puppeteer = require('puppeteer');
const assert = require('chai').assert;
const cfg = require('../config-env.json');
const objR = require('../obj-repo/obj-c.json');
let browser = await puppeteer.launch({//headless:false})
/*
making some UI navigations
*/
try{
const innerText = await page.evaluate(() => document.querySelectorAll('some element name')[1].innerText);
var str = innerText.substring(0,8);
await page.waitFor(2*1000);
if(str===input_lot_number){
result = 'success'
}
}
catch(err){
result = 'failed'
}
finally{
await browser.close();
return result
}
},
请看我的摩卡测试:
it.only('verify Lot in CFR List',function(done)){
this.timeout(20000);
var data = ui.cfrVerifyLot(); //calling cfrVerifyLot() method from another file
data.then(function(result) {
console.log(result); // 'getting undefined' 'expecting success or failed'
if(result=='success'){
done();
}
});
}
似乎 ui.cfrVerifyLot() 方法在完成自身之前分配返回值。 怎么让它在完全完成之前等待分配结果。
这是我的 cfrVerifyLot() 函数:
cfrVerifyLot:function(){
var result = '';
const rest = require('./restAPI');
const puppeteer = require('puppeteer');
const assert = require('chai').assert;
const cfg = require('../config-env.json');
const objR = require('../obj-repo/obj-c.json');
puppeteer.launch({
//headless:false
}).then(async browser => {
/*
making some UI navigations
*/
try{
const innerText = await page.evaluate(() => document.querySelectorAll('some element name')[1].innerText);
var str = innerText.substring(0,8);
await page.waitFor(2*1000);
if(str===input_lot_number){
result = 'success'
}
}
catch(err){
result = 'failed'
}
finally{
await browser.close();
return result
}
});
},
您可以使用 async
和 await
运算符。
it.only('verify Lot in CFR List',async function(done)){
this.timeout(20000);
var result = await ui.cfrVerifyLot();
console.log(result); // 'getting undefined' 'expecting success or failed'
if(result=='success'){
done();
}
});
}
编辑
你的 cfrVerifyLot
函数 returns
没有价值。相反,result
是 return 从 pupperteer
编辑而来的。将 puperteer's
then 链更改为使用 await
,这样您 return 直接来自函数的 result
值。
cfrVerifyLot:async function(){
var result = '';
const rest = require('./restAPI');
const puppeteer = require('puppeteer');
const assert = require('chai').assert;
const cfg = require('../config-env.json');
const objR = require('../obj-repo/obj-c.json');
let browser = await puppeteer.launch({//headless:false})
/*
making some UI navigations
*/
try{
const innerText = await page.evaluate(() => document.querySelectorAll('some element name')[1].innerText);
var str = innerText.substring(0,8);
await page.waitFor(2*1000);
if(str===input_lot_number){
result = 'success'
}
}
catch(err){
result = 'failed'
}
finally{
await browser.close();
return result
}
},