Ecmascript 6 用笑话测试循环可观察性

Ecmascript 6 用笑话测试循环可观察性,ecmascript-6,jestjs,rxjs-observables,Ecmascript 6,Jestjs,Rxjs Observables,我正在为一个模块编写测试,该模块包含一个发出多个值的可观察对象。简而言之,每次模块登录或注销时,可观察对象都会发出一个值。对于测试,我使用beforeAll登录,并创建一个测试,然后测试可观察对象。我遇到的问题是,在测试之后,我在清理过程中再次注销,这会导致测试失败 测试如下所示: test('Connected', (done) => { const connectedSub: Subscription = service.loggedIn.subscribe((data) =>

我正在为一个模块编写测试,该模块包含一个发出多个值的可观察对象。简而言之,每次模块登录或注销时,可观察对象都会发出一个值。对于测试,我使用beforeAll登录,并创建一个测试,然后测试可观察对象。我遇到的问题是,在测试之后,我在清理过程中再次注销,这会导致测试失败

测试如下所示:

test('Connected', (done) => {
const connectedSub: Subscription = service.loggedIn.subscribe((data) => {
    console.log("ConnectedSub: "+data);
    if(data === true){
        done();
    }else{
        done.fail("loggedin was "+data);
    }
});
},2000年)

我遇到的问题是测试按预期通过(正如我在控制台日志中看到的)。但是当测试在清理过程中注销时,会调用done.fail(),测试最终会被标记为失败

我试图取消订阅:

test('Connected', (done) => {
const connectedSub: Subscription = service.loggedIn.subscribe((data) => {
    console.log("ConnectedSub: "+data);
    if(data === true){
        done();
        connectedSub.unsubscribe();
    }else{
        done.fail("loggedin was "+data);
    }
});
},2000年)

但我最终会出现这个错误,即使测试实际上被标记为已通过:

console.error
ReferenceError: connectedSub is not defined

我到底做错了什么?如何在测试中测试可观察到的值,然后在下一个事件到来之前停止侦听?

错误表明可观察到的值是同步的,并且会立即运行。您可以使测试同步,然后取消订阅。在可能的情况下转换为承诺,并坚持Jest处理承诺的方式。