Angular Jasmine:如何测试包含声明变量的方法
我正在开发Angular2/Ionic2应用程序。我正在尝试测试一种类似如下的方法:Angular Jasmine:如何测试包含声明变量的方法,angular,jasmine,ionic2,Angular,Jasmine,Ionic2,我正在开发Angular2/Ionic2应用程序。我正在尝试测试一种类似如下的方法: goToFoo(id : number) { let result = this.someService.initialize(); if (result.hasError == false) { switch (result.startPage) { case START_PAGES.OTHER_PAGE: this._nav.setRoot(OtherPage);
goToFoo(id : number) {
let result = this.someService.initialize();
if (result.hasError == false) {
switch (result.startPage) {
case START_PAGES.OTHER_PAGE:
this._nav.setRoot(OtherPage);
break;
case START_PAGES.FOO:
this._nav.setRoot(FooPage);
break;
default:
return false;
}
}
}
我得到这个错误,指向'if'语句:TypeError:'undefined'不是对象(正在计算'result.hasError')
以下是我尝试过的:
const mockResult = {
hasError(){}
}
it("should open foo page", inject((omitted)) => {
spyOn(mockResult, "hasError");
const mockId = 123;
const fooCall = Page.goToFoo(mockId);
expect(mockResult.hasError).toHaveBeenCalled();
expect(fooCall).toEqual(this._nav.setRoot(FooPage));
}));
我怀疑有更好的方法来测试初始化和使用变量的方法。我没有正确地将mockResult连接到“result”。有什么想法吗?当您测试函数/方法时,您只能测试某些输入(参数)是否会产生某些预期的输出(返回值)。无法测试这些函数/方法的内部状态。您可以测试此函数的执行在函数外部产生的副作用。例如,如果将变量分配给
this.state=this.someService.initalize()
,则可以在函数完成后测试this.state
是否有值。我并不真的想测试内部状态,但测试错误阻止我测试其他任何东西result
inlet result=this.someService.initialize()代码>不可被测试代码识别,当您需要提供一些模拟SomeService
使其工作时,它是未定义的。否则您将无法测试它。它正在提供,但我不知道在那之后该如何处理它。我的想法类似于consttestresult=SomeService.initialize();expect(testResult).tohavebeencall()代码>但这不会影响错误,因为结果
仍然未定义。您需要设置测试,以便调用时goToFoo()
中可以使用此服务。我想当您使用TestComponentBuilder