代码之家  ›  专栏  ›  技术社区  ›  questionar

如何在testcafe中调用外部异步等待函数

  •  2
  • questionar  · 技术社区  · 6 年前

    helper.js 它的功能是

    async function getLink() {
      try {
        const message = await authorize(content);
        const link = message.match(/href=\"(.*?)\"/i);
        return link[1];
      }
      catch(error) {
        console.log('Error loading:',+error);
        throw(error);
      }
    }
    module.exports.getLink = getLink;
    

    在测试执行之后,我想在testcafe脚本中使用这个函数

    在test.spec.js中

    import { Selector } from 'testcafe';
    let link = '';
    fixture My fixture
    .page `https://devexpress.github.io/testcafe/example/`;
    
     test('test1', async t => {
    
    // do something with clientWidth
    });
    test('test2', async t => {
      // use the getLink function here from the helper.js to get the string value
      mailer.getLink().then(res=>{
        link = res;
      })
      t.navigateTo(link)
    });
    

    如何解决这个问题?

    我试着使用clientFunction,但得到的错误是 _ref is not defined 代码如下

    const validationLink = ClientFunction(() => {
      return getLink();
    }, { dependencies: { getLink } });
    let link = await validationLink();
    
    2 回复  |  直到 6 年前
        1
  •  5
  •   hdorgeval    6 年前

    如果 getLink Selector )或者必须在浏览器中计算一些特殊的东西,你必须创建一个 clientFunction 如下所示(clientFunction中包含所有代码(没有导入的代码):

    const getLink = ClientFunction((selector) => {
        return new Promise( (resolve) => {
            const element = selector();
            // check, in developper tools, what are the available properties in element
            console.log("element:", element);
            // code omitted for brevity that reads data from element and does special computation from it
            // build the result to be returned
            const result = 'the computed link';
            resolve(result);
        });
    });
    
    test('test2', async t => {
      const linkSelector = Selector('css selector');
      const link = await getLink(inputSelector);
      await t.navigateTo(link);
    });
    

    获取链接 客户端函数

    test('test2', async t => {
      const link = await mailer.getLink();
      await t.navigateTo(link)
    });
    

    注意,t.navigate()必须等待mailer.getLink()。

        2
  •  0
  •   questionar    6 年前

    由于async/await函数不能在clientFunction内部工作,因此我将测试移到一个单独的文件中,并将getLink()函数移到测试外部

    如果您想一个接一个地运行这两个文件,请将package.json中的脚本添加为“testcafe chrome file1.js&&testcafe chrome文件2.js“

    欢迎直接回答