playwright-testing-library
Version:
playwright + dom-testing-library
108 lines • 5.37 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.withinFixture = exports.screenFixture = exports.registerSelectorsFixture = exports.queriesFixture = exports.options = exports.installTestingLibraryFixture = void 0;
const test_1 = require("@playwright/test");
const helpers_1 = require("./helpers");
const queries_1 = require("./queries");
const defaultConfig = {
asyncUtilExpectedState: 'visible',
asyncUtilTimeout: 1000,
testIdAttribute: 'data-testid',
};
const options = Object.fromEntries(Object.entries(defaultConfig).map(([key, value]) => [key, [value, { option: true }]]));
exports.options = options;
const queriesFixture = ({ page, asyncUtilExpectedState, asyncUtilTimeout }, use) => __awaiter(void 0, void 0, void 0, function* () { return use((0, queries_1.queriesFor)(page, { asyncUtilExpectedState, asyncUtilTimeout })); });
exports.queriesFixture = queriesFixture;
const screenFixture = ({ page, asyncUtilExpectedState, asyncUtilTimeout }, use) => __awaiter(void 0, void 0, void 0, function* () {
const { proxy, revoke } = (0, queries_1.screenFor)(page, { asyncUtilExpectedState, asyncUtilTimeout });
yield use(proxy);
revoke();
});
exports.screenFixture = screenFixture;
const withinFixture = ({ asyncUtilExpectedState, asyncUtilTimeout }, use) => __awaiter(void 0, void 0, void 0, function* () {
return use((root) => 'goto' in root
? (0, queries_1.screenFor)(root, { asyncUtilExpectedState, asyncUtilTimeout }).proxy
: (0, queries_1.queriesFor)(root, { asyncUtilExpectedState, asyncUtilTimeout }));
});
exports.withinFixture = withinFixture;
const engine = () => {
const getError = (error, matcher) => {
if (typeof matcher === 'function' && error instanceof ReferenceError) {
return new ReferenceError([
error.message,
'\n⚠️ A ReferenceError was thrown when using a function TextMatch, did you reference external scope in your matcher function?',
'\nProvided matcher function:',
matcher instanceof TestingLibraryDeserializedFunction
? matcher.original
: matcher.toString(),
'\n',
].join('\n'));
}
return error;
};
return {
query(root, selector) {
const args = JSON.parse(selector, window.__testingLibraryReviver);
if ((0, queries_1.isAllQuery)(queryName))
throw new Error(`PlaywrightTestingLibrary: the plural '${queryName}' was used to create this Locator`);
try {
// @ts-expect-error
const result = window.TestingLibraryDom[queryName](root, ...args);
return result;
}
catch (error) {
throw getError(error, args[0]);
}
},
queryAll(root, selector) {
const testingLibrary = window.TestingLibraryDom;
const args = JSON.parse(selector, window.__testingLibraryReviver);
try {
// @ts-expect-error
const result = testingLibrary[queryName](root, ...args);
if (!result)
return [];
return Array.isArray(result) ? result : [result];
}
catch (error) {
throw getError(error, args[0]);
}
},
};
};
const registerSelectorsFixture = [
({}, use) => __awaiter(void 0, void 0, void 0, function* () {
try {
yield Promise.all(queries_1.synchronousQueryNames.map((name) => __awaiter(void 0, void 0, void 0, function* () {
return test_1.selectors.register((0, helpers_1.queryToSelector)(name), `(${engine.toString().replace(/queryName/g, `"${name}"`)})()`);
})));
}
catch (error) {
// eslint-disable-next-line no-console
console.error('PlaywrightTestingLibrary: failed to register Testing Library functions\n', error);
}
yield use();
}),
{ scope: 'worker', auto: true },
];
exports.registerSelectorsFixture = registerSelectorsFixture;
const installTestingLibraryFixture = [
({ context, asyncUtilExpectedState, asyncUtilTimeout, testIdAttribute }, use) => __awaiter(void 0, void 0, void 0, function* () {
yield context.addInitScript(yield (0, helpers_1.buildTestingLibraryScript)({
config: { asyncUtilExpectedState, asyncUtilTimeout, testIdAttribute },
}));
yield use();
}),
{ scope: 'test', auto: true },
];
exports.installTestingLibraryFixture = installTestingLibraryFixture;
//# sourceMappingURL=fixtures.js.map