56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import {jest, describe, it, expect} from 'bun:test';
|
|
import {Subject} from '../../src/observables';
|
|
|
|
describe('A Subject', () => {
|
|
it('exposes the Subject value', () => {
|
|
const subject = new Subject<string>('init-value');
|
|
|
|
expect(subject.value).toBe('init-value');
|
|
});
|
|
|
|
it('updates the Subject value when set', () => {
|
|
const subject = new Subject<string>('init-value');
|
|
|
|
subject.value = 'some thing';
|
|
|
|
expect(subject.value).toBe('some thing');
|
|
});
|
|
|
|
it('notifies subcribers when subscribing', () => {
|
|
const subject = new Subject<string>('init-value');
|
|
const listener = jest.fn() as (value: string) => void;
|
|
|
|
subject.subscribe(listener);
|
|
|
|
expect(listener).toHaveBeenCalledWith('init-value');
|
|
});
|
|
|
|
it('notifies subcribers when value changes', () => {
|
|
const subject = new Subject<string>('init-value');
|
|
const listener = jest.fn() as (value: string) => void;
|
|
|
|
subject.subscribe(listener);
|
|
|
|
subject.value = 'some thing';
|
|
|
|
expect(listener).toHaveBeenCalledWith('some thing');
|
|
});
|
|
|
|
it('notifies all subcribers when value changes', () => {
|
|
const subject = new Subject<string>('init-value');
|
|
const listener1 = jest.fn() as (value: string) => void;
|
|
const listener2 = jest.fn() as (value: string) => void;
|
|
const listener3 = jest.fn() as (value: string) => void;
|
|
|
|
subject.subscribe(listener1);
|
|
subject.subscribe(listener2);
|
|
subject.subscribe(listener3);
|
|
|
|
subject.value = 'some thing';
|
|
|
|
expect(listener1).toHaveBeenCalledWith('some thing');
|
|
expect(listener2).toHaveBeenCalledWith('some thing');
|
|
expect(listener3).toHaveBeenCalledWith('some thing');
|
|
});
|
|
});
|