我有一个要测试的功能,其中包括一个订阅块。这是一个简化的版本,只是为了说明我在说什么:
let obs = rx.Observable.forkJoin(
api.get('example'),
api.get('example2')
);
obs.subscribe(res => {
vm.result = res[0];
vm.testResult = 123;
});
在我的规范中,我嘲笑我的api并监视get调用并返回如下值:
it('should set values', () => {
spyOn(api, 'get').and.returnValue(Promise.resolve(['test']);
let ctrl = createController();
ctrl.result = 1;
ctrl.testResult = 456;
ctrl.executeFunction();
expect(ctrl.testResult).toEqual(123);
expect(ctrl.result).toEqual('test');
});
同样,这是简化的,我在此控制器中有许多有效的规范。 我要提到的主要事情是,当我添加此测试时,覆盖率然后包括我上面编写的感兴趣的行,因此我知道该模拟程序正在运行并且受到打击,但是Expect语句失败了,它们就是以前的样子。函数运行。
我认为问题在于,expect语句没有等待subscribe块完成。我已经尝试了几种解决方案,例如$scope.$apply()
和其他类似的功能。
有人有什么想法吗?