react-native-navigation
Version:
React Native Navigation - truly native navigation for iOS and Android
51 lines (38 loc) • 1.38 kB
text/typescript
import { CommandsObserver, CommandsListener } from './CommandsObserver';
import { UniqueIdProvider } from '../adapters/UniqueIdProvider';
describe('CommandsObserver', () => {
let uut: CommandsObserver;
let cb1: CommandsListener;
let cb2: CommandsListener;
beforeEach(() => {
cb1 = jest.fn();
cb2 = jest.fn();
uut = new CommandsObserver(new UniqueIdProvider());
});
it('register and notify listener', () => {
const theCommandName = 'theCommandName';
const theParams = { x: 1 };
uut.register(cb1);
uut.register(cb2);
expect(cb1).toHaveBeenCalledTimes(0);
expect(cb2).toHaveBeenCalledTimes(0);
uut.notify(theCommandName, theParams);
expect(cb1).toHaveBeenCalledTimes(1);
expect(cb1).toHaveBeenCalledWith(theCommandName, theParams);
expect(cb2).toHaveBeenCalledTimes(1);
expect(cb2).toHaveBeenCalledWith(theCommandName, theParams);
});
it('remove listener', () => {
expect(cb1).toHaveBeenCalledTimes(0);
expect(cb2).toHaveBeenCalledTimes(0);
uut.register(cb1);
const cb2Subscription = uut.register(cb2);
uut.notify('commandName', {});
expect(cb1).toHaveBeenCalledTimes(1);
expect(cb2).toHaveBeenCalledTimes(1);
cb2Subscription.remove();
uut.notify('commandName', {});
expect(cb1).toHaveBeenCalledTimes(2);
expect(cb2).toHaveBeenCalledTimes(1);
});
});