2016-03-26 26 views
3

我在做與nightwatch.js的JavaScript測試端到端的,我想用sinon.js的假定時器http://sinonjs.org/docs/#clock如何使用nightwatch.js和sinon.js使用假定時器?

嘲笑時鐘,但完成它之前停止測試,我得到的日誌像下面,並且不進步了。

[some test] Test Suite 
=============================== 
✔ Element <body> was visible after 5000 milliseconds. 

我的測試代碼如下所示。我該如何解決這個問題?謝謝。

module.exports = { 
    before: function(browser) { 
    clock = sinon.useFakeTimers(new Date(2015, 7, 20).getTime()); 
    }, 

    after: function(browser) { 
    clock.restore(); 
    browser.end(); 
    }, 

    'some test': function(browser) { 
    const browserName = this.client.options.desiredCapabilities.browserName; 

    browser 
     .url('some/path/') 
     .waitForElementVisible('body', 5000) 
     .pause(5000); // I need to use pause here 

    clock.tick(5001); 

    browser 
     .expect.element('.someElement').to.be.enabled; 
    }, 
}; 

回答

1

的問題是,當您使用興農假的時鐘,時鐘被凍結,一切異步不工作(他們都在等待您來推進時鐘)。 如果你只是想用一個假的日期,你可以寫這樣的:

clock = sinon.useFakeTimers(new Date(2015, 7, 20).getTime(), "Date") 

或者你可以使用lolex(更緊湊)這樣

clock = lolex.install(new Date(2015,7,20), ["Date"]); 

但有一個問題,您的碼。 當您在測試中用假時鐘替換時鐘時,您只是在測試代碼中僞造時鐘,而不是在瀏覽器中。 對於瀏覽器時鐘的僞造,您要測試的頁面必須加載,並且必須注入lolex(或sinon)代碼,然後觸發僞造。 這花了我幾個小時才終於弄清楚了,我用lolex創建了一個nigthwatch命令,使它更容易。 你可以在這裏找到代碼:

https://gist.github.com/vjau/9a8db88d5f1f82d4f9c02e82b29b466f

實際的命令是文件fakeDate.js

0

我找到了解決辦法。正如文森特J和他的要點所提到的,我需要將lolex注入瀏覽器。

我只用了lolex。我將它注入到下面的瀏覽器中。

if (__E2E__) { 
    window.lolex = require('lolex'); 
} 

然後我執行它來設置時間。

browser 
    .execute(function() { 
    const clock = window.lolex.createClock(new Date(2015, 7, 20, 19, 45)); 
    window.Date = clock.Date; 
    });