Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RxJs进行角度单元测试:在可观测响应中引入延迟_Javascript_Angular_Unit Testing_Rxjs - Fatal编程技术网

Javascript 使用RxJs进行角度单元测试:在可观测响应中引入延迟

Javascript 使用RxJs进行角度单元测试:在可观测响应中引入延迟,javascript,angular,unit-testing,rxjs,Javascript,Angular,Unit Testing,Rxjs,我试图对一个函数X进行单元测试。X调用另一个函数Y,它返回一个可观察的值。X给Y打了几次电话。X中的代码使用forkJoin来确保首先完成从Y返回的所有可观察项。所以我也必须测试这一部分。我嘲笑对Y的呼吁是: spyOn(anotherService, "Y").and.returnValues(of(data1), of(data2)); 为了让事情变得更现实一点,我想在Y的响应中引入一个延迟,这样在完成第一个可观察到的和第二个可观察到的之间就有明显的时间间隔,这样X中的

我试图对一个函数X进行单元测试。X调用另一个函数Y,它返回一个可观察的值。X给Y打了几次电话。X中的代码使用forkJoin来确保首先完成从Y返回的所有可观察项。所以我也必须测试这一部分。我嘲笑对Y的呼吁是:

spyOn(anotherService, "Y").and.returnValues(of(data1), of(data2));
为了让事情变得更现实一点,我想在Y的响应中引入一个延迟,这样在完成第一个可观察到的和第二个可观察到的之间就有明显的时间间隔,这样X中的forkJoin代码就可以得到正确的测试


如何在此处引入延迟?

您可以尝试使用
delay
操作符,但我建议不要这样做。您不应该测试
forkJoin
,它已经被RxJS的创建者测试过了

但是,如果您真的想要,请尝试这样做:

import { delay } from 'rxs/operators';
.....
spyOn(anotherService, "Y").and.returnValues(of(data1), of(data2).pipe(delay(50)); // add a delay of 50ms like so

通常,添加
延迟
(或RxJs时间函数)会使测试变得很困难,因为您可能会遇到
一个周期性任务仍在队列中
或其他错误。如果您不想等待整个
50ms
fakeAsync
的话,您可能需要利用
fakeAsync
tick
,我不是在测试forkJoin。我想测试代码的某些部分是在完成所有的观察之后执行的。