2017-10-06 8 views
0

JavaScriptを初めて使い、Googleホームページを読み込んで次の簡単なテストを実行してタイトルを取得する方法を理解しようとしています。このタイトルはテストされます。GoogleのPuppeteerとMochaの非同期呼び出し

const puppeteer = require("puppeteer"); 
var page_title = "blank"; 
assert = require("assert"); 

async function run() { 
    const browser = await puppeteer.launch({ headless: true }); 
    const page = await browser.newPage(); 
    await page.goto("http://www.google.co.uk"); 
    page_title = await page.title(); 
    console.log("Page Title: ", page_title) 
    await browser.close(); 
} 

run(); 

describe("Google", function() { 
    it("Title contains Google", async function() { 
    assert.equal(page_title, "Google"); 
    }); 
}); 

問題は、page_titleが取得される前に実行されるdescribe/itブロックです。私は実際にどのようにこれを構造化すべきかアドバイスしてくれますか?

+0

スイートの前または各テストの前に何かを実行したい場合は、事前フックを使用できます。 [mochaのドキュメントを参照](https://mochajs.org/#hooks)。これらのフックは、あなたのスイート/テストの前または後にモカによって何かが実行されることを保証します。その次に、あなたの 'run()'の結果に ''待ってはいけません/ ''使用しないでください。これはあなたの問題の原因かもしれません。 – Rhayene

+0

ありがとう!前のフックに追加: – ZippityUK

+0

( "Google"、function(){ before(async function(){ this.timeout(10000); const browser = puppeteer.launch({headless:true}); const page = browser.newPage(); await page.goto( "http://www.google.co.uk"); page_title =待ち受けpage.title(); //console.log( "ページタイトル:」、PAGE_TITLE) )(browser.closeを待つ; }); それ( "タイトルのGoogle"、関数(){ assert.equal(PAGE_TITLE、 "グーグル")が含まれ; を}); }); – ZippityUK

答えて

0

あなたはただmocha documentationを読む必要があります。深く掘る必要はありません。にあるasync code

モカプラン3つの方法:

  • コールバック

    あなたのテストが完了しあるときだけコールバックを呼び出します。コールバック(通常が完了した)をそれに追加することによって()。

    const puppeteer = require("puppeteer"); 
    var page_title = "blank"; 
    assert = require("assert"); 
    
    describe("Google", function() { 
        // this.timeout(0); 
        it("Title contains Google", async()=> { 
         const browser = await puppeteer.launch(); //headless by default 
         const page = await browser.newPage(); 
         await page.goto("http://www.google.co.uk"); 
         page_title = await page.title(); 
         console.log("Page Title: ", page_title); 
         assert.equal(page_title, "Google"); 
         await browser.close() 
        }); 
    }); 
    

    私のアドバイスは、TOC上のすべての説明のクイック読書である、とbrief explanation async and awaitをお読みください。

  • 約束
  • asyncawait

は、だから、asyncawaitで、次のように改訂されました

関連する問題