- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用于自动注销功能的网络组件,它会在第 59 分钟显示带有消息的模式窗口,并在没有事件的情况下再停留一分钟。如果用户没有点击窗口上的任何地方,则注销用户。因此,一个小时内没有任何事件将自动注销用户。这很好用。
现在,为了测试此功能,我尝试使用 sinonjs
。我使用了 FakeTimers
但无法获得结果。我正在尝试测试显示消息的模态窗口。
代码如下:
const { When } = require('cucumber'); // eslint-disable-line import/no-extraneous-dependencies
const fs = require('fs');
const path = require('path');
let clock;
async function setupSinon() {
const sinonPath = require.resolve('sinon');
const content = await new Promise((resolve, reject) => {
fs.readFile(
path.join(sinonPath, '../../pkg/sinon.js'),
'utf-8',
async (error, cont) => {
if (error) return reject(error);
resolve(cont);
},
);
});
// creating <script> element for sinonjs to execute on the page
await browser.execute((content) => {
const script = document.createElement('script');
script.type = 'text/javascript';
script.text = content;
document.head.appendChild(script);
}, content);
}
async function iWaitForNMinutes() {
await setupSinon();
await browser.execute(() => {
before(() => {
clock = sinon.useFakeTimers();
});
clock = sinon.useFakeTimers({
now: Date.now(),
shouldAdvanceTime: true,
toFake: ['setTimeout'],
});
clock.tick('59:00'); // advancing the clock to 59 minutes so that auto-logout modal window popup, but this doesn't work
after(() => {
clock.restore();
});
setTimeout(() => {}, 60000);
});
}
When(/^I wait for minutes$/, iWaitForNMinutes);
module.exports = {
iWaitForNMinutes,
};
sinon 5.0.10
如何使用sinonjs
FakeTimer将时间提前到n分钟然后实际等待n分钟?
最佳答案
Sinon 的假计时器非常易于使用,是我最喜欢的 sinon 功能。
用法是这样的
在你的代码中
// in your code
eatCake() {
setTimeout(function() {
// eat cake after 10s
}, 10000); // 10000 === 10s
}
在你的测试中
clock = sinon.useFakeTimers();
clock.tick(9000);
// check if cake is eaten - answer will be false
clock.tick(1000); // 9000 + 1000 === 10s
// check if cake is eaten - answer will be true
所以 sinon 基本上(以编程方式)快进计时器,这样我们的测试就可以检查所需的结果而无需实际等待时间,因为所有测试框架通常都有 2 秒的等待超时,超过 2 秒测试用例就会失败。
在你的例子中,要等待 59 分钟,你可以这样写
clock.tick(1000 * 60 * 59); // 59 minutes
// check if the modal has opened up
clock.tick(1000 * 60 * 1); // 1 minute
// check if the user is logged out
并且不要忘记像您已经完成的那样在最后恢复时钟。
clock.restore();
关于javascript - sinonjs - 将时钟提前到 59 分钟并实际等待 1 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50646921/
我有一个类,我在其中绑定(bind)了一个初始化方法,如下所示 - function MyClass() { this.onHttpCallback = _.bind(onHttpCallba
我将 QUnit 与 sinon 一起使用。我怎样才能制作 sinon 的 fakeserver响应由相同方法调用的链式 ajax? module('demo', { beforeEach:
我正在使用 SinonJS 和 QUnit 运行以下代码: var clock = this.sandbox.useFakeTimers(); var el = jQuery(""); el.appe
我可以在实习生中运行测试,但我在让 spy 工作方面遇到了困难。我正在尝试整合 sinon 这样我就可以得到 spy 。这是一个示例测试文件: define([ 'intern!bdd',
我想做如下的事情: sinon.mock(obj) .expects('func') .atLeast(1) .withArgs(args) .returns(somePredefinedReturn
我正在尝试测试我的 Sinon 测试中的 spy 是否被一个确切的对象调用:没有丢失的属性,没有附加的属性,也没有更改的属性。 我有这个: assert( viewer.entities.add.ca
在开发 API 时(在我的例子中是围绕 websockets 服务的 API),是否有一种好方法可以将它的框架实现提供给另一个开发人员,以便他可以独立于我工作?例如,如果我的 API 仍处于设计阶段,
我有一个函数: var publish = function(a, b, c) { main = a + getWriterName(b,c); } getWriterName 是另一个函数:
我有一个可能会抛出错误的方法,但我无法为这种情况编写 SinonJS/Mocha/Should 单元测试用例。 被测函数示例: function testError(value) { if (!v
我有一个 myModule Node.js 模块,其中包含: function b() { console.log('original b'); } function a() { b(); }
我是SinonJs的初学者,当我尝试编写一些演示代码时,它无法工作,我不知道为什么。 应用程序.js const db = require('./db'); module.exports.si
我实际上使用的是我的社会创建的微框架,我们在其中使用了 Mongoose。 为了管理 mongoose 对象,我们创建了一个模型工厂,它返回一个对应于 mongoose 名称对象的模型。 实际上,我正
我正在尝试使用 Protractor 自动化端到端测试,并且我正在使用 sinonjs 设置一个 fakeServer 来响应由按钮点击触发的某些 ajax 调用(不是全部)。 我陷入困境,不知道如何
我目前正在编写一个 NodeJS 应用程序,我想为一个函数编写一个测试。 SinonJS 似乎是首选的 spy / stub /模拟库,但我似乎无法弄清楚如何在函数上 stub 方法。例如: 假设我正
我有一个用于自动注销功能的网络组件,它会在第 59 分钟显示带有消息的模式窗口,并在没有事件的情况下再停留一分钟。如果用户没有点击窗口上的任何地方,则注销用户。因此,一个小时内没有任何事件将自动注销用
我无法理解 sinonjs spy 的行为。 这是我的测试: asyncTest('sinon async spies test', function() { var pApi = {
使用 SinonJS 3 运行测试我遇到了以下问题 测试有什么问题? var creator = (function() { var createIfNotExists = function cr
在我的应用程序中,在我的路由器使用的导航守卫内,我有一个 vuex 命名空间的 getter 来检查身份验证状态。如果用户已通过身份验证,getter 会执行神奇的底层检查。 我想编写一个简单的单元测
我正在寻找 sinonjs 中的 jasmine.createSpy().and.callFake(fn) 的等价物。 例如: const mySpy = jasmine.createSpy('my
我使用 backbonejs、requirejs 来制作我的 javascript 应用。 我还使用 jasmine、sinonjs 和 jasmine-sinon 插件来测试我的应用程序,但是在使用
我是一名优秀的程序员,十分优秀!