vitest-marbles
Version:
Marble testing helpers library for RxJs and Jest
34 lines (28 loc) • 1.15 kB
text/typescript
import { TestMessages, SubscriptionLog } from '../rxjs/types';
import '../vitest/custom-matchers';
export type MessageOrSubscription = TestMessages | SubscriptionLog[];
function expectedIsSubscriptionLogArray(
actual: MessageOrSubscription,
expected: MessageOrSubscription
): expected is SubscriptionLog[] {
return (
(actual.length === 0 && expected.length === 0) ||
(expected.length !== 0 && (expected[0] as any).subscribedFrame !== undefined)
);
}
function actualIsSubscriptionsAndExpectedIsEmpty(
actual: MessageOrSubscription,
expected: MessageOrSubscription
): actual is SubscriptionLog[] {
return expected.length === 0 && actual.length !== 0 && (actual[0] as any).subscribedFrame !== undefined;
}
export function assertDeepEqual(actual: MessageOrSubscription, expected: MessageOrSubscription) {
if (!expected) return;
if (actualIsSubscriptionsAndExpectedIsEmpty(actual, expected)) {
expect(actual).toHaveEmptySubscriptions();
} else if (expectedIsSubscriptionLogArray(actual, expected)) {
expect(actual).toBeSubscriptions(expected);
} else {
expect(actual).toBeNotifications(expected);
}
}