当前位置: 首页 > 知识库问答 >
问题:

西农用了一个叫伯爵小姐的间谍

师腾
2023-03-14

这是我的密码。我想测试“doing”方法并验证这一点。obj。发送带有时间间隔的调用计数。

我的问题是当我存根\u fetchalldata方法并解决时。。obj。无法调用发送。当<代码>这个。obj。发送移动到\u获取所有数据外部。它可以被称为。

我该如何处理这个问题??谢谢~

var sinon = require('sinon');


class A {
    constructor(obj){
        this.obj = obj;
        this.timer;
    }

    doing(){
        this.timer = setInterval(()=>{
            this._fetchAllDatas().then((data)=>{
                console.log('!!!',data);
                this.obj.send(data);
            });
        },1000)
    }

    stop(){
        clearInterval(this.timer);
    }

    _fetchAllDatas(){
        return Promise.resolve([]);
    }
}

var sandbox = sinon.sandbox.create();
var spy = { send: sandbox.spy()};
var a = new A(spy);
var stub = sandbox.stub(a,'_fetchAllDatas').resolves(['mark']);
var clock = sandbox.useFakeTimers();

a.doing();;
clock.tick(5000);
 sinon.assert.callCount(spy.send, 5); // error the count is zero. it should be 5 times

共有1个答案

魏英勋
2023-03-14

第一,"5秒内调用次数=5次"的结果不会按预期发生。这仅仅是因为setInterval的回调将在N(ms)延迟时间后触发;也就是说,它只会在5s持续时间内发生四次,如下图所示:

x = not triggered
o = triggered

1s--1s--1s--1s--1s
x   o   o   o   o
^start          ^end

其次,您不会在同步调用之后立即从异步调用中获得正确的结果。当您调用a.doing();时,它会启动一个同步版本的setInterval(因为useFakeTimers),该版本将调用一个函数this。_fetchAllDatas()返回一个运行异步化回调,这意味着this.obj.send(data)将异步执行。

即使您使用时钟。勾选(5000),它仍然是一个异步调用。

也就是说,你应该在promise真正解决后的正确时间提出你的主张。

 类似资料:
  • 测试在第一个期望上失败了。有没有办法向函数注入间谍,这样我就可以检查函数是否用正确的参数调用? 谢谢

  • 当swift使用时: O(n)其中,每次调用它时,我们都会遍历整个字符串以便对其进行计数 O(1),其中swift以前存储了这个数组的大小,并简单地访问它。

  • 11.8 总共三天,我是第一天 我这组的第一个面试官好像对我的论文比较感兴趣,问了一些论文方面的问题。 第二个面试官问了数据库隔离级别和线程同步方式。 第三个面试官问了前端的一些问题(简历写了,但是真不熟,大家简历上写的一定都是熟悉的)。 边框标签,内边框外边框,怎么内嵌一个网页。 基本没回答上来,我说我前端不是很熟,面试官说没关系,感觉面试官都挺耐心,态度很好。 每个人十分钟,有的组好像二十分钟

  • 我是RXJava的新手。在一个场景中,我希望调用第一个登录webservice(),如果成功,则希望调用另一个webservice()以获取用户信息。

  • 问题内容: 我有两个同级元素,每个元素都包含动态内容。 在某些情况下,然后会有更多的内容,反之亦然。我希望第二个元素的高度始终等于第一个元素的高度。如果的高度更大,则其高度将溢出div,因此可以滚动。 有什么方法可以通过Flexbox做到这一点? 问题答案: 是的,有可能。让兄弟姐妹单独设置最大高度,并设置其他人的和,然后根据规范将其扩展到他们兄弟姐妹的高度。没有绝对定位。没有设置任何元素的高度。

  • 我使用客户机对一个API进行REST调用,该API返回mulipart中的一个Json和一个PDF文件作为响应的第一和第二部分。 使用上面的客户端解析这个多部分响应的正确方法是什么?