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

Jasmine检查是否调用了私有方法

景仲渊
2023-03-14

我有一个角度服务公开了一个公共方法。在它的主体中,可以根据条件调用两个不同的私有方法

如何根据传递给公共方法的输入参数,与jasmine一起检查是否调用了一个或另一个方法?我知道我们不应该测试私有方法,但实际上在这里我只想验证公共方法是否调用了正确的私有方法。我不想公开私有方法,因为我只希望服务提供一个访问点。

我的服务方式:

public  addOrUpdateShoppingList(list: ShoppingList) {
  if (!list) {
    return Promise.reject("List object is null!");
  }

  if (!list.id) { 
    return this.createNewList(list);
  }

  return this.updatelist(list);
}

private createNewList(list: ShoppingList) {
  const id = this.db.createId();
  list.id = id;
  return this.db.collection<ShoppingList>(this.SHOPPING_LIST_COLLECTION)
                .doc(id)
                .set(list);
}

private updatelist(list: ShoppingList) {
  return this.db.collection<ShoppingList>(this.SHOPPING_LIST_COLLECTION)
                .doc(list.id)
                .update(list);

}

茉莉花试验:

it("addOrUpdateShoppingList should invoke createNewList() if the list doesn't have id.", () => {
const service: DataService = TestBed.get(DataService);
const mockedList: ShoppingList[] = [
  {
    id: null,
    isActive: true,
  }
 ];

service.addOrUpdateShoppingList(newList);

// I tried even with this "workaround", but it fails, even if the private method is accessed
const sp = spyOn<any>(service, "createNewList").and.callThrough();
expect(sp).toHaveBeenCalled();

});

共有1个答案

端木宏盛
2023-03-14

你不能直接测试私有方法——毕竟这是私有方法的重点:它们不能在定义它们的类之外被看到。要了解一些解决方法,请参阅这个堆栈溢出问题。

然而,在你的情况下,你很幸运。两个私有方法都会调用数据库服务。只需监视该服务调用并测试所传递的内容——您是尝试设置还是更新——这将确定调用了哪个内部私有方法。

 类似资料:
  • 这里的任何人都知道如何编写一个测试(或者理想情况下有一个这样的例子)来检查UI线程上是否调用了一个方法?

  • 我正在使用Jest测试一些实用函数。 my_util.js: 另一个例子。js: 测试调用了的最简单方法是什么?这是我当前的单元测试,它失败了。有没有一种方法可以测试函数是否以其名称调用? 结果:

  • 问题内容: 我正在一个需要JavaScript和会话的页面上工作。我已经有代码来警告用户是否禁用了javascript。现在,我想处理禁用cookie的情况,因为会话ID存储在cookie中。 我只想到了几个主意: 将会话ID嵌入链接和表单中 警告用户如果禁用了cookie,则必须启用cookie(需要帮助来检测cookie是否被禁用) 解决此问题的最佳方法是什么?谢谢 编辑 根据链接的文章,我想

  • 问题内容: 我正在尝试模拟一个进行JNDI调用的私有方法。从单元测试中调用该方法时,它将引发异常^。我想模拟该方法用于测试目的。我使用了另一个问题answer中的示例代码,并且在测试通过时,似乎仍在调用底层方法。我在方法中插入,然后将其打印到控制台。 有趣的是,如果我将第一个注释掉,则测试通过。?:( 那么,我如何模拟出一个私有方法,使其不被调用? ^可以理解,由于我的工作空间不支持JNDI,因此

  • 我如何能够检查root是否真的被授予? 另请注意,如何使用命令存储命令的输出?

  • 我正在和一个班合作。我正在使用一些方法。 我需要检查我需要传递的参数,来调用这个方法。我就是这样做的 它工作得很好,但我知道有些方法有重载(没有参数),但这段代码只显示最后声明的方法(有参数要调用)。我怎样才能同时得到这两个重载? 这就是它的样子(我知道这个方法有重载) 例如另一个类:类扫描比打印方法方法 要扫描的代码 类的构造函数,它扫描给定的对象。 这就是我打印它们的方式。