ice/packages/runtime/tests/routesConfig.test.ts

72 lines
1.8 KiB
TypeScript
Raw Permalink Normal View History

Feat/define data loader (#643) * feat: modify dataLoader * feat: add type * feat: add DataLoaderConfig * feat: modify getData to defineDataLoader * chore: remove defineDataLoader * fix: fetcher shoule return promise * fix: loader may be undefined * fix: err loader config * chore: modify example of pha * feat: modify getData * chore: modify type and mofiy options of init * feat: modify fetcher to dataLoaderFetcher and add dataLoaderImport to entry * chore: modify defaultDataLoaderFetcher * chore: load data by route id * feat: modify serverDataLoader and staticDataLoader * feat: add fetcher when route change * fix: deal with window undefined * chore: modify type * feat: try get data from cache * feat: support useData * feat: add defineStaticDataLoader and defineServerDataLoader * chore: modify getData of example * fix: should load data * fix: fix ssg err * fix: fix dataloader for ssg * test: modify env of test * fix: shoule clear cache when route changed * fix: fix renderMode and add defult remder mode * fix: add window * test: add jsdom * test: modify getData to dataLoader * test: modify test of clientApp * test: clear window after each test * test: remove only * test: remove only * chore: modify appear * fix: Try get data from cache when CSR * chore: update lock * chore: remove unused * refactor: data loader (#685) * refactor: set global fetcher * refactor: set global fetcher * fix: should not build react in data loader * fix: test * test: modify test Co-authored-by: 水澜 <shuilan.cj@taobao.com> Co-authored-by: ZeroLing <i@zeroling.com>
2022-11-14 15:59:22 +08:00
/**
* @vitest-environment jsdom
*/
import { expect, it, vi, describe, beforeEach, afterEach } from 'vitest';
import { updateRoutesConfig } from '../src/routesConfig';
describe('routes config', () => {
let documentSpy;
const insertTags: any[] = [];
const appendTags: any[] = [];
beforeEach(() => {
documentSpy = vi.spyOn(global, 'document', 'get');
documentSpy.mockImplementation(() => ({
head: {
querySelector: () => ({
content: '',
}),
insertBefore: (tag) => {
insertTags.push(tag);
},
appendChild: (tag) => {
appendTags.push(tag);
tag.onload();
},
},
getElementById: () => null,
querySelectorAll: () => [],
createElement: (type) => {
const element = {
type,
setAttribute: (attr, value) => {
element[attr] = value;
},
};
return element;
},
}));
});
afterEach(() => {
documentSpy.mockRestore();
});
it('update routes config', async () => {
const routesConfig = {
pageConfig: {
title: 'home',
meta: [
{
name: 'theme-color',
content: '#eee',
},
],
links: [{
href: 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css',
rel: 'stylesheet',
}],
scripts: [{
src: 'https://cdn.jsdelivr.net/npm/lodash@2.4.1/dist/lodash.min.js',
}],
},
};
await updateRoutesConfig(routesConfig);
expect(insertTags.length).toBe(1);
expect(insertTags[0]?.type).toBe('meta');
expect(appendTags.length).toBe(2);
expect(appendTags[0]?.type).toBe('link');
expect(appendTags[1]?.type).toBe('script');
});
});