当您订阅rxjs时,如果测试失败,您如何向测试发送信号?

当您订阅rxjs时,如果测试失败,您如何向测试发送信号?,rxjs,rxjs-pipeable-operators,rxjs-observables,Rxjs,Rxjs Pipeable Operators,Rxjs Observables,我是一个完全的初学者。 我遇到的问题是,一旦我在rxjs observable中抛出一个错误,我的测试就不知道了。当我订阅一个测试时,它在rxjs中失败,它只是抛出一个错误,我需要通知我的测试发生了错误。这里有一个更简单的例子,表明“测试失败”从未打印出来 import { sample } from "rxjs/operators"; const source = interval(1000); // sample last emitted value from source every 2s

我是一个完全的初学者。 我遇到的问题是,一旦我在rxjs observable中抛出一个错误,我的测试就不知道了。当我订阅一个测试时,它在rxjs中失败,它只是抛出一个错误,我需要通知我的测试发生了错误。这里有一个更简单的例子,表明“测试失败”从未打印出来

import { sample } from "rxjs/operators";
const source = interval(1000);
// sample last emitted value from source every 2s
// output: 2..4..6..8..
const example = source.pipe(sample(interval(2000)));
async function test_runner() {
    setup();
    try {
        await test();
        console.log("test succeeded");
    } catch (e) {
        console.log("test failed");
    }
}
async function setup() {
    console.log("setup");
    const subscribe = example.subscribe((val) => {
        console.log(val);
        if (val === 4) {  throw Error("error!"); }
    });
}
async function test() {
    console.log("test");
    await waitMs(10000);
}

test_runner();

async function waitMs(waitTime: number): Promise<void> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve();
        }, waitTime);
    });
}
从“rxjs/operators”导入{sample};
常数源=间隔(1000);
//每2秒对源的上次发射值进行采样
//输出:2..4..6..8。。
const-example=source.pipe(样本(间隔(2000));
异步函数测试\u runner(){
设置();
试一试{
等待测试();
console.log(“测试成功”);
}捕获(e){
console.log(“测试失败”);
}
}
异步函数设置(){
控制台日志(“设置”);
const subscribe=example.subscribe((val)=>{
控制台日志(val);
如果(val==4){抛出错误(“错误!”;}
});
}
异步函数测试(){
控制台日志(“测试”);
等待waitMs(10000);
}
test_runner();
异步函数waitMs(waitTime:number):Promise{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解决();
},等候时间);
});
}

有办法解决这个问题吗?非常感谢您的帮助。

如果您想测试rx流,最好的方法之一就是使用大理石图。 这就是ngrx用于效果测试的内容

使用大理石图,您可以在期望发出/错误的地方编写样式并断言它


例如,syntax
hot('--#')
表示30毫秒后流中出现错误。

如果要测试rx流,最好的方法之一是使用大理石图。 这就是ngrx用于效果测试的内容

使用大理石图,您可以在期望发出/错误的地方编写样式并断言它


例如,syntax
hot('--#')
表示30毫秒后流中出现错误。

订阅时,可以将函数传递给:

  • 处理流发出的项
  • 处理错误
  • 处理完成信号
您也可以在测试中使用它:

descripe('流发出错误时',()=>{
它('应该调用您的错误处理程序',()=>{
const stream$=投掷者('wat?!');
流$.subscribe({错误:(err)=>{
期待(错误=='wat?!')。成为真实;
}});
});
});

常数{throwError}=rxjs;
摩卡咖啡设置(“bdd”);

mocha.run()订阅时,您可以将函数传递给:

  • 处理流发出的项
  • 处理错误
  • 处理完成信号
您也可以在测试中使用它:

descripe('流发出错误时',()=>{
它('应该调用您的错误处理程序',()=>{
const stream$=投掷者('wat?!');
流$.subscribe({错误:(err)=>{
期待(错误=='wat?!')。成为真实;
}});
});
});

常数{throwError}=rxjs;
摩卡咖啡设置(“bdd”);
mocha.run()