gpt4 book ai didi

javascript - 如何在 nightwatch.js 和 sinon.js 中使用假定时器?

转载 作者:行者123 更新时间:2023-11-29 15:29:23 27 4
gpt4 key购买 nike

我正在用 nightwatch.js 做 JavaScript e2e 测试,我想用 sinon.js 的假计时器模拟时钟 http://sinonjs.org/docs/#clock

但测试在完成之前停止,我得到如下日志,并且不再进行。

[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;
},
};

最佳答案

问题是当你使用 sinon 假时钟时,时钟被卡住并且所有异步都不起作用(它们等待你提前时钟)。如果你只是想使用一个假的Date,你可以这样写:

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

或者你可以像这样使用 lolex(更紧凑)

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

但是您的代码有问题。当您在测试中用假时钟替换时钟时,您只是在测试代码中伪造时钟,而不是在浏览器中。要伪造浏览器时钟,必须加载要测试的页面,并且必须向其中注入(inject) lolex(或 sinon)代码,然后触发伪造。这花了我几个小时才最终弄明白,我已经使用 lolex 创建了一个 nigthwatch 命令来使这更容易。你可以在这里找到代码:

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

实际命令是文件 fakeDate.js

关于javascript - 如何在 nightwatch.js 和 sinon.js 中使用假定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com