【发布时间】:2021-04-23 02:57:26
【问题描述】:
在我的 Angular 单元测试中,我的模拟服务有两个属性:
public messageChange: Subject<ChatMessage> = new Subject<ChatMessage>();
public gameChange: Subject<GameState> = new Subject<GameState>();
在我的 SUT 中,我在构造函数中使用它们:
this._subChat = this.hub.messageChange.subscribe((message: ChatMessage) => {
this.message = message;
this.messageChange.next(this.message);
});
this._subGame = this.hub.gameChange.subscribe((game: GameState) => {
this.game.setGame(game);
});
现在我正在尝试使用这两种方法来模拟来自模拟服务的属性:
- Angular Unit Test Mock Replay Subject
- How to spyOn a value property (rather than a method) with Jasmine
现在我的测试看起来像这样:
describe('SignalRService', () => {
let signalrService: SignalRService;
const hubServiceMock = jasmine.createSpyObj('HubConnectionService', [
'isConnectionStarted',
]);
const messageChange = new Subject();
const gameChange = new Subject();
beforeEach(() => {
signalrService = new SignalRService(
hubServiceMock
);
let msg = {} as ChatMessage;
let gam = {} as GameState;
messageChange.next(msg);
gameChange.next(gam);
});
it('Service_ShouldBeCreated', () => {
spyOnProperty(hubServiceMock, 'messageChange', 'get').and.returnValue(
messageChange
);
spyOnProperty(hubServiceMock, 'gameChange', 'get').and.returnValue(
gameChange
);
expect(signalrService).toBeTruthy();
});
}
所以在我创建的测试中:
-
服务模拟
hubServiceMock, -
假
messageChange = new Subject();, -
假
gameChange = new Subject();, -
我为
.next竞选, -
我为属性设置了间谍:
spyOnProperty(hubServiceMock, 'messageChange', 'get').and.returnValue( messageChange );spyOnProperty(hubServiceMock, 'gameChange', 'get').and.returnValue( gameChange );
为什么它对我不起作用?我收到一个错误:
无法读取未定义的属性“订阅”
【问题讨论】:
标签: angular unit-testing properties jasmine subject