茉莉花期望语句不等待订阅块完成

时间:2018-09-13 10:13:05

标签: javascript angularjs jasmine rxjs

我有一个要测试的功能,其中包括一个订阅块。这是一个简化的版本,只是为了说明我在说什么:

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()和其他类似的功能。

有人有什么想法吗?

0 个答案:

没有答案