2017-08-08 4 views
0

のテストでは、beforeafterの方法でテストセットアップとクリーンアップに関する問題に直面しています。Mochaのスコープに関する問題

e2eテストではChromelessを使用しています。簡単に実装するために、私はasync機能をエクスポートして、別のファイル(my-chrome-launcher.js言う)に私のクロムランチャーを移動:

var chromeLauncher = require('chrome-launcher'); 

module.exports = { 
    launchChrome: async function(headless) { 
     try { 
      var flags = ['--disable-gpu']; 

      if (headless) { 
       flags = ['--headless', '--disable-gpu']; 
      } 

      let chrome = await chromeLauncher.launch({ 
       port: 9222, 
       chromeFlags: flags 
      }); 

      console.log(`Chrome debugging running on port ${chrome.port} with pid ${chrome.pid}`); 
      return chrome; 
     } catch (ex) { 
      console.error(ex.messsage); 
     } 
    } 
} 

simple.js

const { 
    Chromeless 
} = require('Chromeless') 
var http = require('http'); 
var fs = require('fs'); 
var assert = require('assert'); 
const myChromeLauncher = require('./my-chrome-launcher.js'); 

describe('app', function() { 

    describe('Top Results', function() { 

     it('should return top results', async() => { 
      chrome = await myChromeLauncher.launchChrome(true); 
      chromeless = new Chromeless(); 

      const links = await chromeless 
       .goto('https://www.google.com') 
       .type('chromeless', 'input[name="q"]') 
       .press(13) 
       .wait('#resultStats') 
       .evaluate(() => { 
        // this will be executed in headless chrome 
        const links = [].map.call(
         document.querySelectorAll('.g h3 a'), 
         a => ({ title: a.innerText, href: a.href }) 
        ) 
        return links; 
       }); 
      // Assert 
      assert.equal(links.length, 11); 

      await chromeless.end(); 

      chrome.kill().catch(e => console.error(e)); 
     }); 
    }); 

}); 

上記のテストはうまく動作しますが、I beforebeforeEach、またはafterEachのような設定コードを以下のように共有する方法を使用したいと思います。

describe('app', function() { 

    describe('Top Results', function() { 
     var chrome; 
     var chromeless; 

     before(function() { 
      chrome = await myChromeLauncher.launchChrome(true); 
      chromeless = new Chromeless(); 
     }); 

.... 

     after(function() { 
      await chromeless.end(); 
      chrome.kill().catch(e => console.error(e)); 
     }); 

}); 

}); 

エラー:

chrome = await myChromeLauncher.launchChrome(true); 
       ^^^^^^^^^^^^^^^^ 

SyntaxError: Unexpected identifier 

答えて

4

あなたbeforeハンドラもdocs

The await operator is used to wait for a Promise. It can only be used inside an async function.

から asyncすなわち

before(async function() { 
    chrome = await myChromeLauncher.launchChrome(true); 
    chromeless = new Chromeless(); 
}); 

にする必要があります