gpt4 book ai didi

javascript - 如何对 rxjs5 进行单元测试?

转载 作者:行者123 更新时间:2023-11-28 20:51:12 25 4
gpt4 key购买 nike

我已经通读了这个“marble-string”文档,但我还是不明白。

我要测试的基本上是一个“协议(protocol)”。我有一个连接到 Observable 并发出数据的“东西”。在我使用 Rx.NET 和 C# 的后端代码中,我编写了一个帮助程序来测试协议(protocol),以便我的测试看起来像这样:

verifier.Send(new AddMaterialPickCommand(commandId, orderId, materialId: Guid.NewGuid(), quantity: 1))
.FailWhen<CommandFailedEvent>(e => e.CommandId == commandId)
.ThenExpect<MaterialPickAddedEvent>(e => e.EntityId == orderId)
.ThenSend(new DeleteOrderCommand(commandId, orderId))
.FailWhen<CommandFailedEvent>(e => e.CommandId == commandId)
.ThenExpect<OrderDeletedEvent>(e => e.EntityId == orderId)
.ExecuteAndWait(Timeout);

在 C# 中,将 observables 连接到所有事物非常容易,等待也非常容易。 IMO 这是一个非常可读的测试代码。

对于 Rxjs5,我没有发现任何等待或做类似事情的可能性。所以 atm 我无法检查我的 observable 发出的一件事是否符合预期:

sut.setValue("key1", "key2");
sut.getObservable("key1", "key2")
.subscribe(value => {
expect(value).toBe("testValue") // I want either execute this or fail after a timeout
});

setValue 实际上在 BehaviourSubject 上调用 next()

我一无所知,有什么想法吗?

最佳答案

有很多方法可以做到这一点,一种方法是超时,如本例 (working example) 所示:

// Generates a value every second starting one second after subscription
const eventEmulatorStream = Rx.Observable.interval(1000);

// Listen to the event stream and timeout after 500 ms.
// On timeout an error will be generated that will be caught in the
// 'error' part of the subscribe.
eventEmulatorStream
.timeout(500)
.subscribe({
next: value => console.log(value),
error: err => console.log(JSON.stringify(err))
});

我建议你看一下 RxJS reference ,里面有很多好吃的东西。根据您使用 RxJS 的方式和位置,您可能需要导入/加载一些东西才能访问某些功能,但应该在 RxJS 文档中非常清楚地解释这些内容。

关于javascript - 如何对 rxjs5 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45863162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com