avocado/packages/traits/test/trait.js

71 lines
1.4 KiB
JavaScript
Raw Normal View History

2021-01-06 01:26:56 -06:00
import {expect} from 'chai';
2022-03-11 05:08:59 -06:00
// eslint-disable-next-line import/no-unresolved
import {Trait} from '@avocado/traits';
2021-01-06 01:26:56 -06:00
class TestTrait extends Trait {
static defaultParams() {
return {
asd: 'hello',
sdf: 311,
};
}
static defaultState() {
return {
foo: 69,
bar: '420',
};
}
}
2021-03-20 08:20:30 -05:00
// it('optimizes output based on deltas', async () => {
// const testTrait = await TestTrait.load({
// params: {
// asd: 'boo',
// },
// state: {
// bar: 'yee',
// },
// });
// expect(testTrait.toJSON()).to.deep.equal({
// params: {
// asd: 'boo',
// },
// state: {
// bar: 'yee',
// },
// });
// });
2021-01-06 01:26:56 -06:00
it('tracks state differences', () => {
const testTrait = new TestTrait();
testTrait.state.foo = 420;
expect(testTrait.stateDifferences()).to.deep.equal({
foo: {
old: 69,
value: 420,
},
});
testTrait.markAsClean();
expect(testTrait.stateDifferences()).to.deep.equal({});
});
2021-01-12 22:36:44 -06:00
it('can memoize listeners', () => {
class ListenerTrait extends Trait {
listeners() {
return {
heard: () => {},
};
}
}
const testTrait = new ListenerTrait();
const memoized = testTrait.memoizedListeners();
expect(Object.keys(testTrait.listeners())).to.deep.equal(Object.keys(memoized));
expect(testTrait.memoizedListeners()).to.equal(testTrait.memoizedListeners());
});