我有一个角度服务公开了一个公共方法。在它的主体中,可以根据条件调用两个不同的私有方法
如何根据传递给公共方法的输入参数,与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();
});
你不能直接测试私有方法——毕竟这是私有方法的重点:它们不能在定义它们的类之外被看到。要了解一些解决方法,请参阅这个堆栈溢出问题。
然而,在你的情况下,你很幸运。两个私有方法都会调用数据库服务。只需监视该服务调用并测试所传递的内容——您是尝试设置
还是更新
——这将确定调用了哪个内部私有方法。
这里的任何人都知道如何编写一个测试(或者理想情况下有一个这样的例子)来检查UI线程上是否调用了一个方法?
我正在使用Jest测试一些实用函数。 my_util.js: 另一个例子。js: 测试调用了的最简单方法是什么?这是我当前的单元测试,它失败了。有没有一种方法可以测试函数是否以其名称调用? 结果:
问题内容: 我正在一个需要JavaScript和会话的页面上工作。我已经有代码来警告用户是否禁用了javascript。现在,我想处理禁用cookie的情况,因为会话ID存储在cookie中。 我只想到了几个主意: 将会话ID嵌入链接和表单中 警告用户如果禁用了cookie,则必须启用cookie(需要帮助来检测cookie是否被禁用) 解决此问题的最佳方法是什么?谢谢 编辑 根据链接的文章,我想
问题内容: 我正在尝试模拟一个进行JNDI调用的私有方法。从单元测试中调用该方法时,它将引发异常^。我想模拟该方法用于测试目的。我使用了另一个问题answer中的示例代码,并且在测试通过时,似乎仍在调用底层方法。我在方法中插入,然后将其打印到控制台。 有趣的是,如果我将第一个注释掉,则测试通过。?:( 那么,我如何模拟出一个私有方法,使其不被调用? ^可以理解,由于我的工作空间不支持JNDI,因此
我如何能够检查root是否真的被授予? 另请注意,如何使用命令存储命令的输出?
假设我有一个类和一个方法: 是否有一种方法可以编写一个在类路径上的任何类中调用该方法时都会失败的测试?我的意思是,不是在运行时调用方法时,而是在代码中声明方法时。 例如,该代码在类路径上的任何类中的precense都应该使测试失败: 我想要实现的目标:我想注释一些不应该在某个项目中调用的方法,但需要放在那里以便在另一个项目中使用,然后编写一个测试,确保注释的方法不会在任何地方被调用。