【问题标题】:Jasmine: expected spy to have been called with [argList1] but actual calls were [argList1], [argList2]Jasmine:预计间谍已被 [argList1] 调用,但实际调用为 [argList1]、[argList2]
【发布时间】:2023-03-06 23:52:01
【问题描述】:

在我的实际代码中,我有一个 forEach 循环,如下所示:

function toTest(myObj) {
    Object.keys(myObj).forEach((key) => {
        doSomething(x, y, [{key, t}]);
    }
}

在测试文件中,我有beforeEachmyObj = {prop1, prop2};doSomething = jasmine.createSpy("doSomething");

然后在it:expect(doSomething).toHaveBeenCalledTimes(2);,它通过了,但是当我尝试检查调用参数时,expect(addSSINodeCb).toHaveBeenCalledWith(x, y, [prop1, t]),茉莉花射出:

预期的间谍 doSomething 已用 [ x, y, [ Object({ prop1, t}) ] ] 但实际调用是 [ x, y, [ Object({ prop1, t }) ] ], [ x, y, [ Object({ prop2, t }) ] ]。

问题是当我的函数只接受一个参数时,相同的代码在类似的情况下也能正常工作,检查两次(以任何顺序)都可以。

我也尝试检查expect(doSomething .calls.allArgs()).toEqual([ [x, y, [prop1, t]], [x, y, [prop2, t]] ]);,但实际上我发现我提供的参数顺序错误(即prop2 应该在prop1 之前,这对我来说是错误的。

有人知道吗?很抱歉混淆了代码,在我的真实代码中,t 实际上取决于密钥,但我认为这并不重要......

【问题讨论】:

    标签: javascript unit-testing jasmine


    【解决方案1】:

    我已经通过使用解决了我的问题 expect(doSomething.calls.argsFor(0)).toEqual([x, y, [prop1, t]]]);expect(doSomething.calls.argsFor(2)).toEqual([x, y, [prop2, t]]]); 虽然我仍然对上面到底发生了什么感到好奇..

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多