【发布时间】:2020-01-12 20:22:38
【问题描述】:
我正在使用 Jasmine/karma 为 angular 6 组件中的 observable 编写单元测试用例。请找到我正在为其编写测试用例的组件方法。
public ngOnInit(): void {
{
this.editOrderContainer.getEditOrderState().subscribe(editOrderState => {
this.shipAddressEditted = editOrderState.data.shipAddressEdited;
this.shipInstructionEditted = editOrderState.data.shipInstructionEditted;
this.hasShippingDetailsChanged = (this.shipAddressEditted || this.shipInstructionEditted) && this.existedAffectedOrderNumbers;
});
...
}
在上面的代码中,我的测试用例应该涵盖/预期变量“hasShippingDetailsChanged”。在规范文件中,我会有如下的“它”
it('verify if Shipping instructions text is set to true if instructions test is changed.', () => {
expect(component.hasShippingDetailsChanged).toBeTruthy();
});
.spec 文件中的 mocking/spy 代码如下,
let editOrderContainer: any;
let getEditOrderState: any;
beforeEach(async () => {
...
editOrderContainer = jasmine.createSpyObj('editOrderContainer', ['getEditOrderState', 'rebookOrder']);
editOrderContainer.getEditOrderState.and.callFake(() => {
return getEditOrderState;
});
getEditOrderState = {
subscribe: function () {
return getOrderDetailsServiceResult();
}
};
spyOn(getEditOrderState, 'subscribe').and.callThrough();
...
});
function getOrderDetailsServiceResult() {
return {
shipAddressEditted: true,
shipInstructionEditted : true
};
}
EditOrderContainer 代码如下:
public getEditOrderState(): Observable<EditOrderState> {
return this.store.select(s => s.editOrderReducer);
}
我在这里面临的问题,它正在返回订阅中 editOrderState 的值,而 lambda 表达式语句没有得到执行
即shipAddressEditted、shipInstructionEditted、hasShippingDetailsChanged 的赋值语句没有被执行。 我希望执行这些行,以便分配所需的变量 hasShippingDetailsChanged。
任何想法我在这里做错了什么?为什么 subscribe lambda 表达式没有在 spec 文件中执行?
【问题讨论】:
标签: angular typescript unit-testing jasmine karma-jasmine