我試圖用單元測驗覆寫一個提供者,其中包括一個帶有管道的回傳地圖。但不知何故,茉莉花說的方法不是函式。
它用于 Hotjar 模塊的提供程式。
這是我的測驗。
fdescribe('UserRolesProvider', () => {
let service: UserRolesProvider;
let userServiceSpy: { onUserEvent: jasmine.Spy };
beforeEach(waitForAsync(() => {
userServiceSpy = jasmine.createSpyObj('UserService', ['onUserEvent']);
TestBed.configureTestingModule({
providers: [UserRolesProvider, { provide: UserService, useValue: userServiceSpy }],
});
service = TestBed.inject(UserRolesProvider);
}));
it('should have a service instance', () => {
expect(service).toBeDefined();
});
it('showContents should return true for an Admin Role', (done) => {
const attributes = {
roles: ['ROLE_ADMIN'],
};
service.getUserAttributes().subscribe((state) => {
expect(state.attributes).toEqual(attributes);
done();
});
spyOn(userServiceSpy, 'onUserEvent').and.returnValue(of(attributes));
service.getUserAttributes(); // invoke after
expect(service.getUserAttributes).toHaveBeenCalled();
});
});
這是我的 TS
@Injectable({
providedIn: 'root',
})
export class UserRolesProvider implements HotjarUserAttributesLoader {
constructor(private userService: UserService) {}
getUserAttributes(): Observable<HotjarUserAttributes> {
return this.userService.onUserEvent().pipe(
map((user) => {
return {
id: user.id,
attributes: {
roles: user.roles,
},
};
})
);
}
}
這就是用戶服務。
private userEvent$ = new ReplaySubject<User>(1);
onUserEvent(): ReplaySubject<User> {
return this.userEvent$;
}
HotJarUserAttributes 它是一個介面
export interface HotjarUserAttributes {
id: string;
attributes: any;
}
uj5u.com熱心網友回復:
您已經使用以下行監視了依賴項:
userServiceSpy = jasmine.createSpyObj('UserService', ['onUserEvent']);
但是您還沒有指定這個 observable 將回傳什么。正如我所看到的,您正在回傳一個 user 型別的物件,該物件在您的組件代碼id中具有兩個屬性。roles您也可以通過在測驗用例中回傳相同的型別來解決此問題。只需在創建間諜后添加以下行。
const returnedObject: HotjarUserAttributes = {
id: '1',
attributes: { roles: [1, 2] },
}
userServiceSpy.onUserEvent.and.returnValue(of(returnedObject))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513955.html
下一篇:如何在Django中測驗洗掉實體
