react-native-ui-lib
Version:
[](https://travis-ci.org/wix/react-native-ui-lib) [](https://www.npmjs.com/package/react-native-ui-lib) [![NPM Down
99 lines (79 loc) • 2.99 kB
JavaScript
import { Assets } from '../Assets';
describe('Assets', () => {
let assets;
beforeEach(() => {
assets = new Assets();
});
describe('.loadAssetsGroup(groupName, assets)', () => {
it('should return the assets object itself', () => {
expect(assets.loadAssetsGroup('emojis', {})).toBe(assets);
});
it('should create nested groups', () => {
assets.loadAssetsGroup('emojis.ascii', { smile: ':)' });
expect(assets.emojis.ascii.smile).toBe(':)');
});
describe('edge cases', () => {
it('should throw if group name is not a string', () => {
expect(() => assets.loadAssetsGroup(42, {})).toThrowErrorMatchingSnapshot();
});
it('should throw if assets are not a plain object', () => {
expect(() => assets.loadAssetsGroup('assets', new class {}())).toThrowErrorMatchingSnapshot();
});
});
describe('when called with empty group name', () => {
describe('and plain object of assets', () => {
it('should create root asset groups', () => {
const emojis = {};
const icons = {};
assets.loadAssetsGroup('', { emojis, icons });
expect(assets.emojis).toBe(emojis);
expect(assets.icons).toBe(icons);
});
});
describe('and an object with assets getters', () => {
it('should create lazy root asset groups', () => {
const emojis = {};
const heavyIconsModule = {};
const requireHeavyIcons = jest.fn().mockReturnValue(heavyIconsModule);
assets.loadAssetsGroup('', {
emojis,
get icons() { return requireHeavyIcons(); },
});
expect(assets.emojis).toBe(emojis);
expect(requireHeavyIcons).not.toHaveBeenCalled();
expect(assets.icons).toBe(heavyIconsModule);
expect(requireHeavyIcons).toHaveBeenCalled();
});
});
});
describe('when has a lazy group', () => {
let iconsModule;
beforeEach(() => {
iconsModule = {
get apply() { return './apply.png'; },
get back() { return './back.png'; },
};
assets.loadAssetsGroup('', {
get icons() { return iconsModule; },
});
});
describe('and called with the same group name', () => {
beforeEach(() => {
assets.loadAssetsGroup('icons', {
get back() { return './back-dark.png'; },
get forward() { return './forward-dark.png'; },
});
});
it('should preserve existing assets upon load', () => {
expect(assets.icons.apply).toBe('./apply.png');
});
it('should overwrite existing assets if they have the same names', () => {
expect(assets.icons.back).toBe('./back-dark.png');
});
it('should append extra assets to the group', () => {
expect(assets.icons.forward).toBe('./forward-dark.png');
});
});
});
});
});