How to use onNetStubbingEvent method in Cypress

Best JavaScript code snippet using cypress

socket-base.js

Source:socket-base.js Github

copy

Full Screen

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}...

Full Screen

Full Screen

driver-events.js

Source:driver-events.js Github

copy

Full Screen

...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}`);...

Full Screen

Full Screen

index.js

Source:index.js Github

copy

Full Screen

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");...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

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})

Full Screen

Using AI Code Generation

copy

Full Screen

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})

Full Screen

Using AI Code Generation

copy

Full Screen

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', (

Full Screen

Using AI Code Generation

copy

Full Screen

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 ===

Full Screen

Using AI Code Generation

copy

Full Screen

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})

Full Screen

Using AI Code Generation

copy

Full Screen

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()`

Full Screen

Cypress Tutorial

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.

Chapters:

  1. What is Cypress? -
  2. Why Cypress? - Learn why Cypress might be a good choice for testing your web applications.
  3. Features of Cypress Testing - Learn about features that make Cypress a powerful and flexible tool for testing web applications.
  4. Cypress Drawbacks - Although Cypress has many strengths, it has a few limitations that you should be aware of.
  5. Cypress Architecture - Learn more about Cypress architecture and how it is designed to be run directly in the browser, i.e., it does not have any additional servers.
  6. Browsers Supported by Cypress - Cypress is built on top of the Electron browser, supporting all modern web browsers. Learn browsers that support Cypress.
  7. Selenium vs Cypress: A Detailed Comparison - Compare and explore some key differences in terms of their design and features.
  8. Cypress Learning: Best Practices - Take a deep dive into some of the best practices you should use to avoid anti-patterns in your automation tests.
  9. How To Run Cypress Tests on LambdaTest? - Set up a LambdaTest account, and now you are all set to learn how to run Cypress tests.

Certification

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.

YouTube

Watch this 3 hours of complete tutorial to learn the basics of Cypress and various Cypress commands with the Cypress testing at LambdaTest.

Run Cypress automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful