Best JavaScript code snippet using cypress
socket-base.js
Source: socket-base.js
1"use strict";2Object.defineProperty(exports, "__esModule", { value: true });3exports.SocketBase = void 0;4const tslib_1 = require("tslib");5const bluebird_1 = (0, tslib_1.__importDefault)(require("bluebird"));6const debug_1 = (0, tslib_1.__importDefault)(require("debug"));7const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));8const net_stubbing_1 = require("../../net-stubbing");9const socketIo = (0, tslib_1.__importStar)(require("../../socket"));10const firefox_util_1 = (0, tslib_1.__importDefault)(require("./browsers/firefox-util"));11const errors_1 = (0, tslib_1.__importDefault)(require("./errors"));12const exec_1 = (0, tslib_1.__importDefault)(require("./exec"));13const files_1 = (0, tslib_1.__importDefault)(require("./files"));14const fixture_1 = (0, tslib_1.__importDefault)(require("./fixture"));15const task_1 = (0, tslib_1.__importDefault)(require("./task"));16const class_helpers_1 = require("./util/class-helpers");17const editors_1 = require("./util/editors");18const file_opener_1 = require("./util/file-opener");19const open_1 = (0, tslib_1.__importDefault)(require("./util/open"));20const session = (0, tslib_1.__importStar)(require("./session"));21const runnerEvents = [22 'reporter:restart:test:run',23 'runnables:ready',24 'run:start',25 'test:before:run:async',26 'reporter:log:add',27 'reporter:log:state:changed',28 'paused',29 'test:after:hooks',30 'run:end',31];32const reporterEvents = [33 // "go:to:file"34 'runner:restart',35 'runner:abort',36 'runner:console:log',37 'runner:console:error',38 'runner:show:snapshot',39 'runner:hide:snapshot',40 'reporter:restarted',41];42const debug = (0, debug_1.default)('cypress:server:socket-base');43const retry = (fn) => {44 return bluebird_1.default.delay(25).then(fn);45};46class SocketBase {47 constructor(config) {48 this.ensureProp = class_helpers_1.ensureProp;49 this.ended = false;50 this.testsDir = null;51 }52 get io() {53 return this.ensureProp(this._io, 'startListening');54 }55 toReporter(event, data) {56 return this.io && this.io.to('reporter').emit(event, data);57 }58 toRunner(event, data) {59 return this.io && this.io.to('runner').emit(event, data);60 }61 isSocketConnected(socket) {62 return socket && socket.connected;63 }64 toDriver(event, ...data) {65 return this.io && this.io.emit(event, ...data);66 }67 onAutomation(socket, message, data, id) {68 // instead of throwing immediately here perhaps we need69 // to make this more resilient by automatically retrying70 // up to 1 second in the case where our automation room71 // is empty. that would give padding for reconnections72 // to automatically happen.73 // for instance when socket.io detects a disconnect74 // does it immediately remove the member from the room?75 // YES it does per http://socket.io/docs/rooms-and-namespaces/#disconnection76 if (this.isSocketConnected(socket)) {77 return socket.emit('automation:request', id, message, data);78 }79 throw new Error(`Could not process '${message}'. No automation clients connected.`);80 }81 createIo(server, path, cookie) {82 return new socketIo.SocketIOServer(server, {83 path,84 cookie: {85 name: cookie,86 },87 destroyUpgrade: false,88 serveClient: false,89 transports: ['websocket'],90 });91 }92 startListening(server, automation, config, options, callbacks) {93 let existingState = null;94 lodash_1.default.defaults(options, {95 socketId: null,96 onResetServerState() { },97 onTestsReceivedAndMaybeRecord() { },98 onMocha() { },99 onConnect() { },100 onRequest() { },101 onResolveUrl() { },102 onFocusTests() { },103 onSpecChanged() { },104 onChromiumRun() { },105 onReloadBrowser() { },106 checkForAppErrors() { },107 onSavedStateChanged() { },108 onTestFileChange() { },109 onCaptureVideoFrames() { },110 });111 let automationClient;112 const { socketIoRoute, socketIoCookie } = config;113 this._io = this.createIo(server, socketIoRoute, socketIoCookie);114 automation.use({115 onPush: (message, data) => {116 return this.io.emit('automation:push:message', message, data);117 },118 });119 const resetRenderedHTMLOrigins = () => {120 const origins = options.getRenderedHTMLOrigins();121 Object.keys(origins).forEach((key) => delete origins[key]);122 };123 const onAutomationClientRequestCallback = (message, data, id) => {124 return this.onAutomation(automationClient, message, data, id);125 };126 const automationRequest = (message, data) => {127 return automation.request(message, data, onAutomationClientRequestCallback);128 };129 const getFixture = (path, opts) => fixture_1.default.get(config.fixturesFolder, path, opts);130 this.io.on('connection', (socket) => {131 var _a, _b;132 debug('socket connected');133 // cache the headers so we can access134 // them at any time135 const headers = (_b = (_a = socket.request) === null || _a === void 0 ? void 0 : _a.headers) !== null && _b !== void 0 ? _b : {};136 socket.on('automation:client:connected', () => {137 if (automationClient === socket) {138 return;139 }140 automationClient = socket;141 debug('automation:client connected');142 // if our automation disconnects then we're143 // in trouble and should probably bomb everything144 automationClient.on('disconnect', () => {145 // if we've stopped then don't do anything146 if (this.ended) {147 return;148 }149 // if we are in headless mode then log out an error and maybe exit with process.exit(1)?150 return bluebird_1.default.delay(2000)151 .then(() => {152 // bail if we've swapped to a new automationClient153 if (automationClient !== socket) {154 return;155 }156 // give ourselves about 2000ms to reconnect157 // and if we're connected its all good158 if (automationClient.connected) {159 return;160 }161 // TODO: if all of our clients have also disconnected162 // then don't warn anything163 errors_1.default.warning('AUTOMATION_SERVER_DISCONNECTED');164 // TODO: no longer emit this, just close the browser and display message in reporter165 return this.io.emit('automation:disconnected');166 });167 });168 socket.on('automation:push:request', (message, data, cb) => {169 automation.push(message, data);170 // just immediately callback because there171 // is not really an 'ack' here172 if (cb) {173 return cb();174 }175 });176 socket.on('automation:response', automation.response);177 });178 socket.on('automation:request', (message, data, cb) => {179 debug('automation:request %s %o', message, data);180 return automationRequest(message, data)181 .then((resp) => {182 return cb({ response: resp });183 }).catch((err) => {184 return cb({ error: errors_1.default.clone(err) });185 });186 });187 socket.on('reporter:connected', () => {188 if (socket.inReporterRoom) {189 return;190 }191 socket.inReporterRoom = true;192 return socket.join('reporter');193 });194 // TODO: what to do about reporter disconnections?195 socket.on('runner:connected', () => {196 if (socket.inRunnerRoom) {197 return;198 }199 socket.inRunnerRoom = true;200 return socket.join('runner');201 });202 // TODO: what to do about runner disconnections?203 socket.on('spec:changed', (spec) => {204 return options.onSpecChanged(spec);205 });206 socket.on('app:connect', (socketId) => {207 return options.onConnect(socketId, socket);208 });209 socket.on('set:runnables:and:maybe:record:tests', (runnables, cb) => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {210 return options.onTestsReceivedAndMaybeRecord(runnables, cb);211 }));212 socket.on('mocha', (...args) => {213 return options.onMocha.apply(options, args);214 });215 socket.on('open:finder', (p, cb = function () { }) => {216 return open_1.default.opn(p)217 .then(() => {218 return cb();219 });220 });221 socket.on('recorder:frame', (data) => {222 return options.onCaptureVideoFrames(data);223 });224 socket.on('reload:browser', (url, browser) => {225 return options.onReloadBrowser(url, browser);226 });227 socket.on('focus:tests', () => {228 return options.onFocusTests();229 });230 socket.on('is:automation:client:connected', (data, cb) => {231 const isConnected = () => {232 return automationRequest('is:automation:client:connected', data);233 };234 const tryConnected = () => {235 return bluebird_1.default236 .try(isConnected)237 .catch(() => {238 return retry(tryConnected);239 });240 };241 // retry for up to data.timeout242 // or 1 second243 return bluebird_1.default244 .try(tryConnected)245 .timeout(data.timeout != null ? data.timeout : 1000)246 .then(() => {247 return cb(true);248 }).catch(bluebird_1.default.TimeoutError, (_err) => {249 return cb(false);250 });251 });252 socket.on('backend:request', (eventName, ...args) => {253 // cb is always the last argument254 const cb = args.pop();255 debug('backend:request %o', { eventName, args });256 const backendRequest = () => {257 switch (eventName) {258 case 'preserve:run:state':259 existingState = args[0];260 return null;261 case 'resolve:url': {262 const [url, resolveOpts] = args;263 return options.onResolveUrl(url, headers, automationRequest, resolveOpts);264 }265 case 'http:request':266 return options.onRequest(headers, automationRequest, args[0]);267 case 'reset:server:state':268 return options.onResetServerState();269 case 'log:memory:pressure':270 return firefox_util_1.default.log();271 case 'firefox:force:gc':272 return firefox_util_1.default.collectGarbage();273 case 'firefox:window:focus':274 return firefox_util_1.default.windowFocus();275 case 'get:fixture':276 return getFixture(args[0], args[1]);277 case 'read:file':278 return files_1.default.readFile(config.projectRoot, args[0], args[1]);279 case 'write:file':280 return files_1.default.writeFile(config.projectRoot, args[0], args[1], args[2]);281 case 'net':282 return (0, net_stubbing_1.onNetStubbingEvent)({283 eventName: args[0],284 frame: args[1],285 state: options.netStubbingState,286 socket: this,287 getFixture,288 args,289 });290 case 'exec':291 return exec_1.default.run(config.projectRoot, args[0]);292 case 'task':293 return task_1.default.run(config.pluginsFile, args[0]);294 case 'save:session':295 return session.saveSession(args[0]);296 case 'clear:session':297 return session.clearSessions();298 case 'get:session':299 return session.getSession(args[0]);300 case 'reset:session:state':301 session.clearSessions();302 resetRenderedHTMLOrigins();303 return;304 case 'get:rendered:html:origins':305 return options.getRenderedHTMLOrigins();306 case 'reset:rendered:html:origins': {307 resetRenderedHTMLOrigins();308 return;309 }310 default:311 throw new Error(`You requested a backend event we cannot handle: ${eventName}`);312 }313 };314 return bluebird_1.default.try(backendRequest)315 .then((resp) => {316 return cb({ response: resp });317 }).catch((err) => {318 return cb({ error: errors_1.default.clone(err) });319 });320 });321 socket.on('get:existing:run:state', (cb) => {322 const s = existingState;323 if (s) {324 existingState = null;325 return cb(s);326 }327 return cb();328 });329 socket.on('save:app:state', (state, cb) => {330 options.onSavedStateChanged(state);331 // we only use the 'ack' here in tests332 if (cb) {333 return cb();334 }335 });336 socket.on('external:open', (url) => {337 debug('received external:open %o', { url });338 // using this instead of require('electron').shell.openExternal339 // because CT runner does not spawn an electron shell340 // if we eventually decide to exclusively launch CT from341 // the desktop-gui electron shell, we should update this to use342 // electron.shell.openExternal.343 // cross platform way to open a new tab in default browser, or a new browser window344 // if one does not already exist for the user's default browser.345 const start = (process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open');346 return require('child_process').exec(`${start} ${url}`);347 });348 socket.on('get:user:editor', (cb) => {349 (0, editors_1.getUserEditor)(false)350 .then(cb);351 });352 socket.on('set:user:editor', (editor) => {353 (0, editors_1.setUserEditor)(editor);354 });355 socket.on('open:file', (fileDetails) => {356 (0, file_opener_1.openFile)(fileDetails);357 });358 reporterEvents.forEach((event) => {359 socket.on(event, (data) => {360 this.toRunner(event, data);361 });362 });363 runnerEvents.forEach((event) => {364 socket.on(event, (data) => {365 this.toReporter(event, data);366 });367 });368 callbacks.onSocketConnection(socket);369 });370 return this.io;371 }372 end() {373 this.ended = true;374 // TODO: we need an 'ack' from this end375 // event from the other side376 return this.io.emit('tests:finished');377 }378 changeToUrl(url) {379 return this.toRunner('change:to:url', url);380 }381 close() {382 return this.io.close();383 }384 sendSpecList(specs, testingType) {385 this.toRunner('specs:changed', { specs, testingType });386 }387}...
driver-events.js
Source: driver-events.js
...84 lodash_1.default.extend(ret, lodash_1.default.pick(options, types_1.PLAIN_FIELDS));85 return ret;86}87exports._restoreMatcherOptionsTypes = _restoreMatcherOptionsTypes;88function onNetStubbingEvent(opts) {89 return __awaiter(this, void 0, void 0, function* () {90 const { state, getFixture, args, eventName, frame } = opts;91 debug('received driver event %o', { eventName, args });92 switch (eventName) {93 case 'route:added':94 return onRouteAdded(state, getFixture, frame);95 case 'subscribe':96 return subscribe(state, frame);97 case 'event:handler:resolved':98 return intercepted_request_1.InterceptedRequest.resolveEventHandler(state, frame);99 case 'send:static:response':100 return sendStaticResponse(state, getFixture, frame);101 default:102 throw new Error(`Unrecognized net event: ${eventName}`);...
index.js
Source: index.js
1"use strict";2Object.defineProperty(exports, "__esModule", { value: true });3exports.netStubbingState = exports.getRouteForRequest = exports.InterceptResponse = exports.InterceptRequest = exports.InterceptError = exports.onNetStubbingEvent = void 0;4var driver_events_1 = require("./driver-events");5Object.defineProperty(exports, "onNetStubbingEvent", { enumerable: true, get: function () { return driver_events_1.onNetStubbingEvent; } });6var error_1 = require("./middleware/error");7Object.defineProperty(exports, "InterceptError", { enumerable: true, get: function () { return error_1.InterceptError; } });8var request_1 = require("./middleware/request");9Object.defineProperty(exports, "InterceptRequest", { enumerable: true, get: function () { return request_1.InterceptRequest; } });10var response_1 = require("./middleware/response");11Object.defineProperty(exports, "InterceptResponse", { enumerable: true, get: function () { return response_1.InterceptResponse; } });12var route_matching_1 = require("./route-matching");13Object.defineProperty(exports, "getRouteForRequest", { enumerable: true, get: function () { return route_matching_1.getRouteForRequest; } });14const state_1 = require("./state");...
Using AI Code Generation
1Cypress.on('window:before:load', (win) => {2 win.onNetStubbingEvent = (e) => {3 console.log(e);4 }5})6Cypress.on('window:before:load', (win) => {7 win.onNetStubbingEvent = (e) => {8 console.log(e);9 }10})11Cypress.on('window:before:load', (win) => {12 win.onNetStubbingEvent = (e) => {13 if (e.event === 'request:route:matched') {14 console.log(e.data)15 }16 }17})
Using AI Code Generation
1Cypress.on('net:stubbing:events', (events) => {2 events.forEach((event) => {3 if (event.event === 'route:added') {4 console.log(`Route added: ${route.alias}`)5 }6 })7})
Using AI Code Generation
1Cypress.on('net:stubbing:response', (req) => {2 if (req.response.body) {3 req.response.body = req.response.body.replace(4 }5})6Cypress.on('net:stubbing:request', (req) => {7 if (req.body) {8 req.body = req.body.replace(9 }10})11Cypress.on('net:stubbing:error', (req, err) => {12 console.log('Error', err)13})14Cypress.on('net:stubbing:warning', (req, err) => {15 console.log('Warning', err)16})17Cypress.on('net:stubbing:route:added', (route) => {18 console.log('Route added', route)19})20Cypress.on('net:stubbing:route:removed', (route) => {21 console.log('Route removed', route)22})23Cypress.on('net:stubbing:route:updated', (route) => {24 console.log('Route updated', route)25})26Cypress.on('net:stubbing:route:replaced', (
Using AI Code Generation
1Cypress.on('net:stubbing:event', (eventName, data) => {2 if (eventName === 'request:received') {3 console.log('Request received', data)4 }5})6Cypress.on('net:stubbing:event', (eventName, data) => {7 if (eventName === 'request:received') {8 console.log('Request received', data)9 }10})11Cypress.on('net:stubbing:event', (eventName, data) => {12 if (eventName === 'request:received') {13 console.log('Request received', data)14 }15})16Cypress.on('net:stubbing:event', (eventName, data) => {17 if (eventName === 'request:received') {18 console.log('Request received', data)19 }20})21Cypress.on('net:stubbing:event', (eventName, data) => {22 if (eventName === 'request:received') {23 console.log('Request received', data)24 }25})26Cypress.on('net:stubbing:event', (eventName, data) => {27 if (eventName === 'request:received') {28 console.log('Request received', data)29 }30})31Cypress.on('net:stubbing:event', (eventName, data) => {32 if (eventName === 'request:received') {33 console.log('Request received', data)34 }35})36Cypress.on('net:stubbing:event', (eventName, data) => {37 if (eventName === 'request:received') {38 console.log('Request received', data)39 }40})41Cypress.on('net:stubbing:event', (eventName, data) => {42 if (eventName === 'request:received') {43 console.log('Request received', data)44 }45})46Cypress.on('net:stubbing:event', (eventName, data) => {47 if (eventName ===
Using AI Code Generation
1cy.onNetStubbingEvent('cy.intercept', (interception) => {2})3cy.onNetStubbingEvent('cy.intercept', (interception) => {4})5cy.onNetStubbingEvent('cy.intercept', (interception) => {6})7cy.onNetStubbingEvent('cy.intercept', (interception) => {8})9cy.onNetStubbingEvent('cy.intercept', (interception) => {10})11cy.onNetStubbingEvent('cy.intercept', (interception) => {12})13cy.onNetStubbingEvent('cy.intercept', (interception) => {14})15cy.onNetStubbingEvent('cy.intercept', (interception) => {16})17cy.onNetStubbingEvent('cy.intercept', (interception) => {18})19cy.onNetStubbingEvent('cy.intercept', (interception) => {20})21cy.onNetStubbingEvent('cy.intercept', (interception) => {22})
Using AI Code Generation
1Cypress.on('net:stubbing:response', (req, res) => {2 console.log(req);3 console.log(res);4});5### `cy.intercept()`6 body: { title: 'foo', completed: false, userId: 1 },7});8### `cy.route2()`9 body: { title: 'foo', completed: false, userId: 1 },10});11### `cy.route()`12 body: { title: 'foo', completed: false, userId: 1 },13});14### `cy.server()`15cy.server();16### `cy.visit()`
cypress wait for redirection after login
Cypress sees undefined when reffering to an aliased text value
Cypress: Stub response for same route with three different responses
Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1 (credentials file is present)
In Cypress how to select input element based on name?
Validate CSS 'backgroud-image' URL using Cypress
How can we run offline tests using cypress in a PWA application?
Skipping a test in Cypress conditionally
How to add types to Cypress.env?
How can I test automatically Service Workers in offline mode? Trying with Cypress
Cypress provides retry abilities on assertion. You can resolve the waiting issue for the redirection URL with the below change
cy.url().should('contain', '/redirection-url')
OR
cy.url().should('eq', 'mysite.com/redirection-url')
Here should
assertion will wait till 4 seconds by default and retries cy.url()
You can change the default timeout by updating parameter in cypress.json
file
{
"defaultCommandTimeout": 30000
}
Hope this will solve your issue.
Check out the latest blogs from LambdaTest on this topic:
Every company wants their release cycle to be driven in the fast lane. Agile and automation testing have been the primary tools in the arsenal of any web development team. Incorporating both in SDLC(Software Development Life Cycle), has empowered web testers and developers to collaborate better and deliver faster. It is only natural to assume that these methodologies have become lifelines for web professionals, allowing them to cope up with the ever-changing customer demands.
Innovation distinguishes between a leader and a follower.
If you’re reading this, it’s either because you’re curious about the factors that go into Laravel testing and how to implement them in your application or because you just want to improve your knowledge of Laravel testing. Whatever your goals may be, you will have something to take away after reading this article.
Mobile devices and mobile applications – both are booming in the world today. The idea of having the power of a computer in your pocket is revolutionary. As per Statista, mobile accounts for more than half of the web traffic worldwide. Mobile devices (excluding tablets) contributed to 54.4 percent of global website traffic in the fourth quarter of 2021, increasing consistently over the past couple of years.
Selenium has always been the most preferred test automation framework for testing web applications. This open-source framework supports popular programming languages (e.g. Java, JavaScript, Python, C#, etc.), browsers, and operating systems. It can also be integrated with other test automation frameworks like JUnit, TestNG, PyTest, PyUnit, amongst others. As per the State of open source testing survey, Selenium is still the king for web automation testing, with 81% of organizations preferring it over other frameworks.
Cypress is a renowned Javascript-based open-source, easy-to-use end-to-end testing framework primarily used for testing web applications. Cypress is a relatively new player in the automation testing space and has been gaining much traction lately, as evidenced by the number of Forks (2.7K) and Stars (42.1K) for the project. LambdaTest’s Cypress Tutorial covers step-by-step guides that will help you learn from the basics till you run automation tests on LambdaTest.
You can elevate your expertise with end-to-end testing using the Cypress automation framework and stay one step ahead in your career by earning a Cypress certification. Check out our Cypress 101 Certification.
Watch this 3 hours of complete tutorial to learn the basics of Cypress and various Cypress commands with the Cypress testing at LambdaTest.
Get 100 minutes of automation test minutes FREE!!