})
test('unobservable values', () => {
- const msg = 'not observable'
+ const warn = jest.spyOn(console, 'warn')
+ let lastMsg: string
+ warn.mockImplementation(msg => {
+ lastMsg = msg
+ })
+
+ const getMsg = (value: any) => `value is not observable: ${String(value)}`
+ const assertValue = (value: any) => {
+ observable(value)
+ expect(lastMsg).toMatch(getMsg(value))
+ }
+
// number
- expect(() => observable(1)).toThrowError(msg)
+ assertValue(1)
// string
- expect(() => observable('foo')).toThrowError(msg)
+ assertValue('foo')
// boolean
- expect(() => observable(false)).toThrowError(msg)
+ assertValue(false)
// null
- expect(() => observable(null)).toThrowError(msg)
+ assertValue(null)
// undefined should work because it returns empty object observable
- expect(() => observable(undefined)).not.toThrowError(msg)
+ lastMsg = ''
+ observable(undefined)
+ expect(lastMsg).toBe('')
// symbol
const s = Symbol()
- expect(() => observable(s)).toThrowError(msg)
+ assertValue(s)
+
+ warn.mockRestore()
+
// built-ins should work and return same value
const p = Promise.resolve()
expect(observable(p)).toBe(p)