如何使用参数重置间谍策略?

问题描述 投票:0回答:1

如何清除withArgs SpyStrategy?我在文档中找不到任何内容。

我通常会创建一个如下所示的间谍对象:

  let inventoryServiceSpy = jasmine.createSpyObj('InventoryService', [
    'getInventories'
  ]);

在我的测试中,我将为通用调用提供参数,如下所示:

inventoryServiceSpy.getInventories.and.returnValue([someInventoryObject]);

为了确保此返回值不会在 beforeEach 中的测试之间共享,我将包含以下内容:

inventoryServiceSpy.getInventories.and.returnValue([]);

这个效果很好。然而,在一项测试中,我根据参数返回不同的值:

    inventoryServiceSpy.getInventories
      .withArgs('org1')
      .and.returnValue([org1Inv]);
    inventoryServiceSpy.getInventories
      .withArgs('org2')
      .and.returnValue([org2Inv]);

但是,如果此测试在另一个恰好使用“org1”作为输入的测试之前运行,它将返回存储的 org1Inv 而不是 someInventoryObject。我认为它这样做是因为 withArgs 没有在 beforeEach 中清除,并且 withArgs 优先于通用 returnValue。

有没有办法清除beforeEach中所有withArgs值?或者在使用它的任何测试结束时清除它?

angular jasmine
1个回答
0
投票

你可以尝试做

inventoryServiceSpy.getInventories.calls.reset()

这将重置所有间谍呼叫。

另一个解决方案是

在每个测试用例之后使用

beforeEach
在根级别重新初始化角度分量,以便它将在每个测试之后运行。这将清除所有间谍和侦听器,并为您提供干净的测试状态。

© www.soinside.com 2019 - 2024. All rights reserved.