У меня есть небольшая функция в Angular 7, которую я тестирую с помощью Jest. Функция выглядит следующим образом:
private checkFreeProduct(allowance: SubscriberConnectivityAllowanceInterface): Observable<SubscriberConnectivityAllowanceInterface> {
// TODO: This is currently just a temp function to be extended when required
return of(allowance);
}
Как вы можете видеть, на данный момент все, что она делает, это создает наблюдаемую из ее входных данных, но она находится в стадии разработки и будет расширена.
Я тестирую его с помощью Jest следующим образом:
it('should return an observable of the allowance', () => {
const allowance: SubscriberConnectivityAllowanceInterface = {
hotspotAuthenticated: HotspotAuthenticationEnum.TRUE,
remainingOctets: 100,
remainingSeconds: 200,
activeProductCost: ConnectivityProductCostEnum.PAID,
activeProductDuration: ConnectivityProductDurationEnum.FLIGHT,
activeProductType: ConnectivityProductTypeEnum.PREMIUM,
connectivityProducts: []
};
const expected = hot('a|', {
a: allowance
});
expect(hotspotService['checkFreeProduct'](allowance)).toBeObservable(expected);
});
Однако тест не пройден из-за какой-то проблемы с синхронизацией. Наблюдаемый expected
результат выглядит следующим образом:
[
{
"frame": 0,
"notification": {
"error": undefined,
"hasValue": true,
"kind": "N",
"value": {
"activeProductCost": "paid",
"activeProductDuration": "flight",
"activeProductType": "premium",
"connectivityProducts": [],
"hotspotAuthenticated": 1,
"remainingOctets": 100,
"remainingSeconds": 200
}
}
},
{
"frame": 10,
"notification": {
"error": undefined,
"hasValue": false,
"kind": "C",
"value": undefined
}
}
]
, а наблюдаемая, созданная из вызова функции hotspotService['checkFreeProduct'](allowance)
, выглядит следующим образом:
[
{
"frame": 0,
"notification": {
"error": undefined,
"hasValue": true,
"kind": "N",
"value": {
"activeProductCost": "paid",
"activeProductDuration": "flight",
"activeProductType": "premium",
"connectivityProducts": [],
"hotspotAuthenticated": 1,
"remainingOctets": 100,
"remainingSeconds": 200
}
}
},
{
"frame": 0, // <------- this is the only difference
"notification": {
"error": undefined,
"hasValue": false,
"kind": "C",
"value": undefined
}
}
]
Теперь я не совсем уверен почему есть две эмиссии от этих наблюдаемых, но я буду go с этим. Что я не понимаю, так это то, почему наблюдаемое из вызова функции генерирует два события, оба в кадре 0. Я пробовал оба hot()
и cold()
, и экспериментировал с различными шариками в этих вызовах, но без радости. Может кто-нибудь объяснить, пожалуйста?