Skip to content

Commit

Permalink
test(reactive): add mark tests and fix docs typo
Browse files Browse the repository at this point in the history
  • Loading branch information
gwsbhqt committed Apr 18, 2021
1 parent 61678aa commit b3b2679
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/reactive/docs/api/markRaw.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 描述

标记任意一个对象或者类原型为永远不可被 observable 劫持,优先级比 markObservable
标记任意一个对象或者类原型为永远不可被 observable 劫持,优先级比 markObservable

## 签名

Expand Down
68 changes: 67 additions & 1 deletion packages/reactive/src/__tests__/annotations.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { observable, action, model } from '../'
import { autorun, reaction } from '../autorun'
import { observe } from '../observe'
import { isObservable } from '../externals'
import { isObservable, isSupportObservable, markObservable, markRaw } from '../externals'

test('observable annotation', () => {
const obs = observable<any>({
Expand Down Expand Up @@ -243,3 +243,69 @@ test('computed with computed array length', () => {
obs.arr = []
expect(handler).toBeCalledWith(false)
})

test('is support observable', () => {
const obs = observable<any>({ aa: 111 })
expect(isSupportObservable(obs)).toBeFalsy()
expect(isSupportObservable(null)).toBeFalsy()
expect(isSupportObservable([])).toBeTruthy()
expect(isSupportObservable({})).toBeTruthy()
expect(isSupportObservable({ $$typeof: {}, _owner: {} })).toBeFalsy()
expect(isSupportObservable({ _isAMomentObject: {} })).toBeFalsy()
expect(isSupportObservable({ _isJSONSchemaObject: {} })).toBeFalsy()
expect(isSupportObservable({ toJS: () => {} })).toBeFalsy()
expect(isSupportObservable({ toJSON: () => {} })).toBeFalsy()
expect(isSupportObservable(new Map())).toBeTruthy()
expect(isSupportObservable(new WeakMap())).toBeTruthy()
expect(isSupportObservable(new Set())).toBeTruthy()
expect(isSupportObservable(new WeakSet())).toBeTruthy()
})

describe('mark operation', () => {
test('plain object should be observable', () => {
const obs = observable<any>({ aa: 111 })
expect(isObservable(obs)).toBeTruthy()
})

test('class instance should be observable', () => {
class Class {}
const obs = observable<any>(new Class())
const obs2 = observable<any>(new Class())
expect(isObservable(obs)).toBeTruthy()
expect(isObservable(obs2)).toBeTruthy()
})

test('object with toJS function should NOT be observable', () => {
const obs = observable<any>({ aa: 111, toJS: () => {} })
expect(isObservable(obs)).toBeFalsy()
})

test('plain object marked as raw should NOT be observable', () => {
const obs = observable<any>(markRaw({ aa: 111 }))
expect(isObservable(obs)).toBeFalsy()
})

test('class marked as raw instance should NOT be observable', () => {
class Class {}
markRaw(Class)
const obs = observable<any>(new Class())
const obs2 = observable<any>(new Class())
expect(isObservable(obs)).toBeFalsy()
expect(isObservable(obs2)).toBeFalsy()
})

test('object with toJS function marked as observable should be observable', () => {
const obs = observable<any>(markObservable({ aa: 111, toJS: () => {} }))
expect(isObservable(obs)).toBeTruthy()
})

test('plain object marked as raw and observable should NOT be observable', () => {
const obs = observable<any>(markRaw(markObservable({ aa: 111 })))
expect(isObservable(obs)).toBeFalsy()
})

test('plain object marked as observable and raw should NOT be observable', () => {
const obs = observable<any>(markObservable(markRaw({ aa: 111 })))
expect(isObservable(obs)).toBeFalsy()
})
})

0 comments on commit b3b2679

Please sign in to comment.