Angular 观察到的特殊结果:用茉莉花大理石进行测试

Angular 观察到的特殊结果:用茉莉花大理石进行测试,angular,unit-testing,jasmine,jestjs,jasmine-marbles,Angular,Unit Testing,Jasmine,Jestjs,Jasmine Marbles,我在Angular 7中有一个小函数,我正在用Jest测试它。函数如下所示: private checkFreeProduct(余量:SubscriberConnectivityAllowanceInterface):可观察{ //TODO:这目前只是一个需要扩展的临时函数 退还(津贴); } 正如您所看到的,目前它所做的只是从它的输入中创建一个可观察的对象,但它正在开发中并将被扩展 我用这样的笑话来测试它: it('应返回可观察的余量',()=>{ 常数容差:SubscriberConnec

我在Angular 7中有一个小函数,我正在用Jest测试它。函数如下所示:

private checkFreeProduct(余量:SubscriberConnectivityAllowanceInterface):可观察{
//TODO:这目前只是一个需要扩展的临时函数
退还(津贴);
}
正如您所看到的,目前它所做的只是从它的输入中创建一个可观察的对象,但它正在开发中并将被扩展

我用这样的笑话来测试它:

it('应返回可观察的余量',()=>{
常数容差:SubscriberConnectivityAllowanceInterface={
HotSpotAuthenticationed:HotspotAuthenticationEnum.TRUE,
剩余数量:100,
剩余秒数:200,
activeProductCost:ConnectivityProductCostEnum.PAID,
activeProductDuration:ConnectivityProductDurationEnum.FLIGHT,
activeProductType:ConnectionityProductTypeEnum.PREMIUM,
连接产品:[]
};
预期常数=热('a |'{
a:零用钱
});
期望(hotspotService['checkFreeProduct'](折扣))。可观测(期望);
});
然而,由于一些时间问题,测试失败了。
预期的
可观察结果如下所示:

[
{
“帧”:0,
“通知”:{
“错误”:未定义,
“hasValue”:正确,
“种类”:“N”,
“价值”:{
“活动产品成本”:“已支付”,
“activeProductDuration”:“航班”,
“activeProductType”:“高级”,
“连接产品”:[],
“热点认证”:1,
“剩馀”节目:100,
“剩余秒数”:200
}
}
},
{
“框架”:10,
“通知”:{
“错误”:未定义,
“hasValue”:false,
“种类”:“C”,
“值”:未定义
}
}
]
从函数调用
hotspotService['checkFreeProduct'](余量)
创建的可观察对象如下所示:

[
{
“帧”:0,
“通知”:{
“错误”:未定义,
“hasValue”:正确,
“种类”:“N”,
“价值”:{
“活动产品成本”:“已支付”,
“activeProductDuration”:“航班”,
“activeProductType”:“高级”,
“连接产品”:[],
“热点认证”:1,
“剩馀”节目:100,
“剩余秒数”:200
}
}
},
{

“frame”:0,//您询问的关于发出的两个事件的问题是因为大理石
hot('a |'))
-第一个发出您希望断言“a”的值,第二个发出以指示热可观测的完成
'|'
。这可以从您在问题中添加的事件中的通知->种类属性推断出来。例如:“种类”:“N”->发出的值。种类”:“C”->可观测的完成

回答: 要修复单元测试,只需将MABLE更改为
'(a |)'
,以便它们在同一时间段内发出。我已经测试过了,它可以工作

不同时间段的原因: 热的和冷的产生可观察的流,这些流在特定的时间间隔内发出值。大理石表示随着时间的推移在可观察物上发生的动作

  • -
    -表示时间范围的单位
  • [a-z0-9]
    -表示从流中发出的值
  • |
    -表示可观察流的完成
  • #
    -表示可观察流中的错误
  • ()
    -表示在同一时间帧上发出的值的分组
对于您的解决方案,
hot('(a |')
-表示在同一时间帧内发出值
a
,并完成可观察流

参考文献:

正如您所看到的,目前它所做的只是根据输入创建一个可观察的,但它正在开发中,并将被扩展。好的。我只是想给出一种测试服务的替代方法。我已经更新了我的答案。这一点正在实现,但需要更好地解释。首先,我会将您的答案移至顶部,并从顶部开始工作,不是作为脚注,而是添加了一些解释和链接。我编辑了你的答案来说明我的意思,请随意撤销,但这就是我要做的,第一点与被问的实际问题无关