UNPKG

mobx-roof

Version:

Simple React data management by mobx.

109 lines (107 loc) 2.8 kB
import { expect } from 'chai'; import MobxModel from '../MobxModel'; import { observable } from 'mobx'; import UserModel from '../../__tests__/helpers/UserModel'; describe('MobxModel', () => { let user; let userJSON; beforeEach(() => { userJSON = { isLogin: false, password: null, username: 'abc', userId: null, userInfo: {}, }; user = new UserModel({ username: 'abc' }); }); it('toJSON', () => { expect(user.toJSON()).to.eql(userJSON); expect(user.toJSON('isLogin')).to.eql(false); expect(user.toJSON('unknownKey')).to.eql(undefined); // nested MobxModel const model = new MobxModel({ users: [user, user], arr: ['1', { obj: 2 }], reg: /reg/, num: 1, mobxVal: observable({ observable: true }), nest: { nest: { arr: ['1', { obj: 2 }], user, }, }, }); expect(model.users[0] instanceof MobxModel).to.eql(true); expect(model.nest.nest.user instanceof MobxModel).to.eql(true); const result = { users: [userJSON, userJSON], arr: ['1', { obj: 2 }], reg: /reg/, num: 1, mobxVal: { observable: true }, nest: { nest: { arr: ['1', { obj: 2 }], user: userJSON, } }, }; expect(model.toJSON()).to.eql(result); expect(model.toJSON('users')).to.eql([userJSON, userJSON]); }); it('stringify', () => { expect(user.stringify()).to.eql(JSON.stringify(userJSON)); }); it('map', () => { const keys = []; user.each((item, key) => { keys.push(key); }); expect(keys).to.eql(Object.keys(userJSON)); }); it('dataKeys', () => { expect(user.dataKeys).to.eql(Object.keys(userJSON)); }); it('getID', () => { const user1 = new UserModel; const user2 = new UserModel; expect(user1.getID()).to.not.eql(user2.getID()); }); it('immediately extending from MoboxModel should throw error', () => { class ChineseUser extends UserModel {} expect(() => { return new ChineseUser; }).to.throw(/immediately extend/); }); it('model autorun', (done) => { let times = 0; const model = new UserModel({}, null, { autoLoad() { times ++; this.toJSON(); expect(times).to.lessThan(3); if (times === 2) { done(); } }, }); model.setName('newUsername'); }); it('model set', (done) => { let times = 0; const model = new UserModel({}, null, { autoLoad() { times ++; this.toJSON(); expect(times).to.lessThan(3); if (times === 2) done(); }, }); model.set({ username: 'username', password: 'password', undefine: 'undefined', }); model.set('username', 'username'); }); });