cybernaut
Version:
Reliable, zero configuration end-to-end testing in BDD-style.
99 lines • 5.73 kB
JavaScript
// tslint:disable no-any
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const proxyquire = require("proxyquire");
const ava_1 = require("ava");
const stubs_1 = require("./stubs");
proxyquire.noPreserveCache();
proxyquire.preserveCache();
proxyquire('../implementation', {
'selenium-webdriver': { Builder: stubs_1.implementationStubs.Builder }, './test': { Test: stubs_1.implementationStubs.Test }
});
const implementation_1 = require("../implementation");
let driver;
let options;
let tap;
ava_1.default.beforeEach(() => {
stubs_1.resetAll(stubs_1.implementationStubs);
stubs_1.implementationStubs.Builder.returns({ withCapabilities: stubs_1.implementationStubs.withCapabilities });
stubs_1.implementationStubs.withCapabilities.returns({ build: stubs_1.implementationStubs.build });
stubs_1.implementationStubs.build.returns(driver = { manage: stubs_1.implementationStubs.manage, quit: stubs_1.implementationStubs.quit });
stubs_1.implementationStubs.manage.returns({ timeouts: stubs_1.implementationStubs.timeouts });
stubs_1.implementationStubs.timeouts.returns({
implicitlyWait: stubs_1.implementationStubs.implicitlyWait,
pageLoadTimeout: stubs_1.implementationStubs.pageLoadTimeout,
setScriptTimeout: stubs_1.implementationStubs.setScriptTimeout
});
options = {
capabilities: { browserName: 'chrome' },
retries: 100,
retryDelay: 200,
timeouts: { element: 300, page: 400, script: 500 }
};
tap = { pass: stubs_1.implementationStubs.pass };
});
ava_1.default('`execute` should create a WebDriver and set its timeouts', (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
t.plan(15);
yield t.notThrows(implementation_1.execute(stubs_1.implementationStubs.implementation, tap, options));
t.is(stubs_1.implementationStubs.Builder.callCount, 1);
t.true(stubs_1.implementationStubs.Builder.calledWithNew());
t.is(stubs_1.implementationStubs.withCapabilities.callCount, 1);
t.deepEqual(stubs_1.implementationStubs.withCapabilities.args[0][0], { browserName: 'chrome' });
t.is(stubs_1.implementationStubs.build.callCount, 1);
t.is(stubs_1.implementationStubs.implicitlyWait.callCount, 1);
t.is(stubs_1.implementationStubs.implicitlyWait.args[0][0], 300);
t.is(stubs_1.implementationStubs.pageLoadTimeout.callCount, 1);
t.is(stubs_1.implementationStubs.pageLoadTimeout.args[0][0], 400);
t.is(stubs_1.implementationStubs.setScriptTimeout.callCount, 1);
t.is(stubs_1.implementationStubs.setScriptTimeout.args[0][0], 500);
t.is(stubs_1.implementationStubs.manage.callCount, 3);
t.is(stubs_1.implementationStubs.timeouts.callCount, 3);
t.is(stubs_1.implementationStubs.quit.callCount, 1);
}));
ava_1.default('`execute` should create a Test and call `implementation`', (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
t.plan(9);
yield t.notThrows(implementation_1.execute(stubs_1.implementationStubs.implementation, tap, options));
t.is(stubs_1.implementationStubs.implementation.callCount, 1);
t.is(stubs_1.implementationStubs.Test.callCount, 1);
t.is(stubs_1.implementationStubs.Test.args[0][0], driver);
t.is(stubs_1.implementationStubs.Test.args[0][1], 100);
t.is(stubs_1.implementationStubs.Test.args[0][2], 200);
const test = stubs_1.implementationStubs.implementation.args[0][0];
t.throws(() => test.fail('foo', new Error('bar')), 'foo (cause: bar)');
test.pass('baz');
t.is(stubs_1.implementationStubs.pass.callCount, 1);
t.is(stubs_1.implementationStubs.pass.args[0][0], 'baz');
}));
ava_1.default('`execute` should await `implicitlyWait`', (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
t.plan(4);
stubs_1.implementationStubs.implicitlyWait.rejects(new Error('foo'));
yield t.throws(implementation_1.execute(stubs_1.implementationStubs.implementation, tap, options), 'foo');
t.is(stubs_1.implementationStubs.implicitlyWait.callCount, 1);
t.is(stubs_1.implementationStubs.implementation.callCount, 0);
t.is(stubs_1.implementationStubs.quit.callCount, 1);
}));
ava_1.default('`execute` should await `pageLoadTimeout`', (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
t.plan(4);
stubs_1.implementationStubs.pageLoadTimeout.rejects(new Error('foo'));
yield t.throws(implementation_1.execute(stubs_1.implementationStubs.implementation, tap, options), 'foo');
t.is(stubs_1.implementationStubs.pageLoadTimeout.callCount, 1);
t.is(stubs_1.implementationStubs.implementation.callCount, 0);
t.is(stubs_1.implementationStubs.quit.callCount, 1);
}));
ava_1.default('`execute` should await `setScriptTimeout`', (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
t.plan(4);
stubs_1.implementationStubs.setScriptTimeout.rejects(new Error('foo'));
yield t.throws(implementation_1.execute(stubs_1.implementationStubs.implementation, tap, options), 'foo');
t.is(stubs_1.implementationStubs.setScriptTimeout.callCount, 1);
t.is(stubs_1.implementationStubs.implementation.callCount, 0);
t.is(stubs_1.implementationStubs.quit.callCount, 1);
}));
ava_1.default('`execute` should await `implementation`', (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
t.plan(3);
stubs_1.implementationStubs.implementation.rejects(new Error('foo'));
yield t.throws(implementation_1.execute(stubs_1.implementationStubs.implementation, tap, options), 'foo');
t.is(stubs_1.implementationStubs.implementation.callCount, 1);
t.is(stubs_1.implementationStubs.quit.callCount, 1);
}));
//# sourceMappingURL=implementation.test.js.map