gpt4 book ai didi

unit-testing - Jasmine 监视调用外部方法的方法(Angular 2)

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:43 25 4
gpt4 key购买 nike

在我的 Angular 2 应用程序中,如何测试我的主要方法中的外部方法(依赖项)是否被相应地调用。

例如,

Class ServiceA
{
constructor(
private serviceB : ServiceB
){}


//How do I test this method to make sure it does what it should ?
mainMethod()
{
//External method
this.serviceB.otherMethod();

this.sideMethod();
}

sideMethod()
{
//Do something
}
}

Class ServiceB
{
constructor(){}

otherMethod()
{
//Do something
}
}

这是我到目前为止尝试过的方法

it('On otherMethod returns false, do something', 
inject([ServiceA, ServiceB], (serviceA: ServiceA, serviceB: ServiceB) => {
spyOn(serviceB, 'otherMethod').and.returnValue(false);
spyOn(serviceA, 'sideMethod');
spyOn(serviceA, 'mainMethod').and.callThrough();


expect(serviceB.otherMethod()).toHaveBeenCalled();
expect(serviceA.sideMethod()).toHaveBeenCalled();
expect(serviceA.mainMethod()).toHaveBeenCalled();
}));

从上面的代码,我得到一个错误说明

could not find an object to spy upon for otherMethod()

这里有什么问题吗?

最佳答案

您必须传递 spy serviceB.otherMethod 的函数引用。您当前正在通过调用 serviceB.otherMethod() 来调用 spy ,这将返回 otherMethod 的返回值而不是 spy 。

it('On otherMethod returns false, do something', 
inject([ServiceA, ServiceB], (serviceA: ServiceA, serviceB: ServiceB) => {
spyOn(serviceB, 'otherMethod').and.returnValue(false);
spyOn(serviceA, 'sideMethod');
spyOn(serviceA, 'mainMethod').and.callThrough();

// Notice spy reference here instead of calling it.
expect(serviceB.otherMethod).toHaveBeenCalled();
expect(serviceA.sideMethod).toHaveBeenCalled();
expect(serviceA.mainMethod).toHaveBeenCalled();
}));

Jasmine 文档:https://jasmine.github.io/2.0/introduction.html#section-Spies

关于unit-testing - Jasmine 监视调用外部方法的方法(Angular 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com