因此,在测试中我已经为AuthService提供了一个模拟类
MyStruct PopulateStruct() {
MyStruct s;
s.a = x;
s.b = y;
return s;
}
void Caller() {
MyStruct s = PopulateStruct();
}
此模拟服务具有 isAuthorized()功能,始终返回true ;
而且,在规范中,看起来像这样
{ provide: AuthService, useClass: AuthServiceMock }
编辑:添加了描述的完整代码
it('init root with LOGIN PAGE if is authenticated, () => {
expect(comp['rootPage']).toBe(LoginPage); // true!
});
it('init root with WELCOME PAGE if is not authenticated, () => {
// Here I need to change the result of isAuthorized()
// so inside the AuthServiceMock returns false
expect(comp['rootPage']).toBe(WelcomePage); // false :(
});
答案 0 :(得分:2)
你真的错过了很多这方面的信息,但是让我试着帮忙。
希望AuthServiceMock.isAuthorized实际上已经是一个茉莉花间谍了。这可以在定义类时完成:
class AuthServiceMock {
isAuthorized = jasmine.createSpy('auth.isAuthorized').and.returnValue(true);
}
如果是这种情况,并且isAuthorized
是间谍,那么您可以更改第二次测试中间谍的返回值,如下所示:
it('init root with WELCOME PAGE if is not authenticated',
inject([AuthService], (mockAuthInstance) => {
mockAuthInstance.isAuthorized.and.returnValue(false);
expect(comp.rootPage).toBe(WelcomePage);
})
);
在这个例子中,我们使用了预定义的注入规则,并将模拟服务直接注入到我们的测试中。
如果isAuthorized
尚未成为间谍,那么您可以在测试中将其作为间谍,如下所示
it('init root with WELCOME PAGE if is not authenticated',
inject([AuthService], (mockAuthInstance) => {
spyOn(mockAuthInstance, 'isAuthorized').and.returnValue(false);
expect(comp.rootPage).toBe(WelcomePage);
})
);