2015-11-16 89 views
1

我使用這個問題作爲例子:測試與摩卡,Nightmare.js沒有ES6語法和產量

Use Nightmare.js without ES6 syntax and yield

但是,如果我把它放在摩卡測試,這將在超時,這裏的走代碼:

describe('Google', function() { 
it('should do things', function(done) { 
    var x = Date.now(); 
    var nightmare = Nightmare(); 
    Promise.resolve(nightmare 
     .goto('http://google.com') 
     .evaluate(function() { 
      return document.getElementsByTagName('html')[0].innerHTML; 
     })) 
    .then(function(html) { 
     console.log("done in " + (Date.now()-x) + "ms"); 
     console.log("result", html); 
     expect(html).to.equal('abc'); 
     done(); 
     return nightmare.end(); 
    }).then(function(result) { 

    }, function(err) { 
     console.error(err); // notice that `throw`ing in here doesn't work 
    }); 
}); 
}); 

但問題是,done()永遠不會被調用。

回答

2

我使用摩卡發電機插件來做收益。繼承人我將如何構造代碼:

​​

如果你正在使用發電機,因爲做了你並不需要做的是一個處理一個回調異步

+0

對我來說,仍然無法正常工作,當我運行'摩卡test.js'它抱怨'beforeEach(功能*(){ 語法錯誤:意外的令牌*' –

+0

@MaksimLuzik使用節點的新版本。支持生成器語法的js –

0

您應該.END後移動()結束後,評估,否則你會得到很多錯誤,如done()沒有被調用,也因爲電子過程不關閉而超時。

describe('Google', function() { 
    it('should do things', function(done) { 
    var x = Date.now(); 
    var nightmare = Nightmare(); 
    nightmare 
     .goto('http://google.com') 
     .evaluate(() => { 
      return document.getElementsByTagName('html')[0].innerHTML; 
     }) 
     .end() 
     .then((html) => { 
      console.log("done in " + (Date.now()-x) + "ms"); 
      console.log("result", html); 
      expect(html).to.equal('abc'); 
      done(); 
     }) 
     .catch(done); 
    }); 
});