skutter
Version:
Skutter: Opinionated BDD Browser based test framework
47 lines (35 loc) • 1.54 kB
text/typescript
import * as Lazy from "lazy.js";
import { Page } from "skutter";
class Pages {
private pageFiles: string[] = [
"./github-landing",
"./github-search-results"
];
private _pages: Page[] = [];
find(pageName: string): Page {
this.ensureLoaded();
let page = Lazy(this._pages).find((page: Page) => { return page.name === pageName; });
if (page === undefined || page === null) {
let availablePages = this._pages.map((page: Page) => { return page.name; }).join(", ");
if (availablePages.length > 0) {
throw new Error(`Unable to find a page with the name "${pageName}". Available pages [${availablePages}]`);
}
throw new Error(`Unable to find a page with the name "${pageName}". There don't appear to be any pages registered.`);
}
return page;
}
private ensureLoaded(): void {
if (!this._pages || this._pages.length != this.pageFiles.length) {
Lazy(this.pageFiles).each((filename: string) => {
try {
// Pages must be 'export { xxx as default }' in order to be loaded correctly here.
let page = require(filename).default;
this._pages.push(page);
} catch (exception) {
throw new Error(`Error during load of ${filename}. Message: ${exception.message}.`);
}
});
}
}
}
export { Pages };