代码之家  ›  专栏  ›  技术社区  ›  Vinirdishtith Rana

在javascript/mocha中,如何等待函数返回值,然后再将其分配给变量

  •  0
  • Vinirdishtith Rana  · 技术社区  · 8 年前

    请看我的摩卡测试:

    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
        }
        });
    },
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Norris Oduro    8 年前

    您可以使用 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 从返回 pupperteer . 更改 puperteer's 然后使用链条 等候 所以您返回 后果 值直接来自函数。

    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
        }  
    },