Я использую API FileSystem для создания каталога с двумя записями внутри, которые мне нужно использовать в качестве входных данных для теста, который я хочу запустить. Проблема в том, что Жасмин не дожидается разрешения обещания перед запуском теста, поэтому он терпит неудачу. Я использовал обертку asyn c, но, похоже, это не имеет значения.
Кто-нибудь знает, почему она не работает?
describe('traverseDirectory() method', () => {
let directoryToTraverse;
let entries;
beforeEach(async(() => {
console.log('beforeEach test');
const file1 = createBlob(['<a id="a"><b id="b">Hello A</b></a>'], {type: 'text/html'});
const file2 = createBlob(['<a id="b"><b id="b">Hello B</b></a>'], {type: 'text/html'});
function createFile(fs: any, fileName: string, blob: Blob): Promise<any> {
return new Promise((resolve, reject) => {
fs.root.getFile(fileName, {create: true}, (fileEntry) => {
fileEntry.createWriter((fileWriter) => {
fileWriter.onwriteend = (e) => {
resolve(fileEntry);
// @ts-ignore
};
fileWriter.write(blob);
});
});
});
}
function moveToDirectory(directoryEntry: any, fileEntry: any): void {
fileEntry.moveTo(directoryEntry);
}
function createDirectory(fs: any, name: string): Promise<any> {
return new Promise((resolve, reject) => {
fs.root.getDirectory(name, {create: true}, (directoryEntry) => {
resolve(directoryEntry);
}, errorHandler);
});
}
function errorHandler(err: any): void {
console.log('ERROR:', err);
}
const promise = new Promise((resolve, reject) => {
function onInitFs(fs: any): void {
createDirectory(fs, 'Documents').then((directoryEntry) => {
const f1 = createFile(fs, 'File1.html', file1);
const f2 = createFile(fs, 'File2.html', file2);
Promise.all([f1, f2]).then((createdEntries) => {
createdEntries.forEach((entry) => {
moveToDirectory(directoryEntry, entry);
});
directoryToTraverse = directoryEntry;
console.log('Finished setup');
resolve();
});
});
}
// @ts-ignore
window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, onInitFs, errorHandler);
});
})
);
it('should run', async(() => {
console.log('Running the test');
service.traverseDirectory(directoryToTraverse).then(res => {
entries = res;
});
expect(directoryToTraverse).toEqual(entries);
}));
});