Best JavaScript code snippet using mountebank
middleware.js
Source:middleware.js
1'use strict';2/**3 * Express middleware functions to inject into the HTTP processing4 * @module5 */6var errors = require('./errors');7/**8 * Returns a middleware function to transforms all outgoing relative links in the response body9 * to absolute URLs, incorporating the current host name and port10 * @param {number} port - The port of the current instance11 * @returns {Function}12 */13function useAbsoluteUrls (port) {14 return function (request, response, next) {15 var setHeaderOriginal = response.setHeader,16 sendOriginal = response.send,17 host = request.headers.host || 'localhost:' + port,18 absolutize = function (link) { return 'http://' + host + link; };19 response.setHeader = function () {20 var args = Array.prototype.slice.call(arguments);21 if (args[0] && args[0].toLowerCase() === 'location') {22 args[1] = absolutize(args[1]);23 }24 setHeaderOriginal.apply(this, args);25 };26 response.send = function () {27 var args = Array.prototype.slice.call(arguments),28 body = args[0],29 changeLinks = function (obj) {30 if (obj._links) {31 Object.keys(obj._links).forEach(function (rel) {32 obj._links[rel].href = absolutize(obj._links[rel].href);33 });34 }35 },36 traverse = function (obj, fn) {37 fn(obj);38 Object.keys(obj).forEach(function (key) {39 if (obj[key] && typeof obj[key] === 'object') {40 traverse(obj[key], fn);41 }42 });43 };44 if (typeof body === 'object') {45 traverse(body, changeLinks);46 }47 sendOriginal.apply(this, args);48 };49 next();50 };51}52/**53 * Returns a middleware function to return a 404 if the imposter does not exist54 * @param {Object} imposters - The current dictionary of imposters55 * @returns {Function}56 */57function createImposterValidator (imposters) {58 return function validateImposterExists (request, response, next) {59 var imposter = imposters[request.params.id];60 if (imposter) {61 next();62 }63 else {64 response.statusCode = 404;65 response.send({66 errors: [errors.MissingResourceError('Try POSTing to /imposters first?')]67 });68 }69 };70}71/**72 * Returns a middleware function that logs the requests made to the server73 * @param {Object} log - The logger74 * @param {string} format - The log format75 * @returns {Function}76 */77function logger (log, format) {78 function shouldLog (request) {79 var isStaticAsset = (['.js', '.css', '.gif', '.png', '.ico'].some(function (fileType) {80 return request.url.indexOf(fileType) >= 0;81 })),82 isHtmlRequest = (request.headers.accept || '').indexOf('html') >= 0,83 isXHR = request.headers['x-requested-with'] === 'XMLHttpRequest';84 return !(isStaticAsset || isHtmlRequest || isXHR);85 }86 return function (request, response, next) {87 if (shouldLog(request)) {88 var message = format.replace(':method', request.method).replace(':url', request.url);89 log.info(message);90 }91 next();92 };93}94/**95 * Returns a middleware function that passes global variables to all render calls without96 * having to pass them explicitly97 * @param {Object} vars - the global variables to pass98 * @returns {Function}99 */100function globals (vars) {101 return function (request, response, next) {102 var originalRender = response.render;103 response.render = function () {104 var args = Array.prototype.slice.call(arguments),105 variables = args[1] || {};106 Object.keys(vars).forEach(function (name) {107 variables[name] = vars[name];108 });109 args[1] = variables;110 originalRender.apply(this, args);111 };112 next();113 };114}115/**116 * The mountebank server uses header-based content negotiation to return either HTML or JSON117 * for each URL. This breaks down on IE browsers as they fail to send the correct Accept header,118 * and since we default to JSON (to make the API easier to use), that leads to a poor experience119 * for IE users. We special case IE to html by inspecting the user agent, making sure not to120 * interfere with XHR requests that do add the Accept header121 * @param {Object} request - The http request122 * @param {Object} response - The http response123 * @param {Function} next - The next middleware function to call124 */125function defaultIEtoHTML (request, response, next) {126 // IE has inconsistent Accept headers, often defaulting to */*127 // Our default is JSON, which fails to render in the browser on content-negotiated pages128 if (request.headers['user-agent'] && request.headers['user-agent'].indexOf('MSIE') >= 0) {129 if (!(request.headers.accept && request.headers.accept.match(/application\/json/))) {130 request.headers.accept = 'text/html';131 }132 }133 next();134}135/**136 * Returns a middleware function that defaults the content type to JSON if not set to make137 * command line testing easier (e.g. you don't have to set the Accept header with curl) and138 * parses the JSON before reaching a controller, handling errors gracefully.139 * @param {Object} log - The logger140 * @returns {Function}141 */142function json (log) {143 return function (request, response, next) {144 request.body = '';145 request.setEncoding('utf8');146 request.on('data', function (chunk) {147 request.body += chunk;148 });149 request.on('end', function () {150 if (request.body === '') {151 next();152 }153 else {154 try {155 request.body = JSON.parse(request.body);156 request.headers['content-type'] = 'application/json';157 next();158 }159 catch (e) {160 log.error('Invalid JSON: ' + request.body);161 response.statusCode = 400;162 response.send({163 errors: [errors.InvalidJSONError({ source: request.body })]164 });165 }166 }167 });168 };169}170module.exports = {171 useAbsoluteUrls: useAbsoluteUrls,172 createImposterValidator: createImposterValidator,173 logger: logger,174 globals: globals,175 defaultIEtoHTML: defaultIEtoHTML,176 json: json...
Using AI Code Generation
1var mountebank = require('mountebank');2var imposterValidator = mountebank.createImposterValidator();3var imposter = {4 {5 {6 is: {7 }8 }9 }10};11var result = imposterValidator.validate(imposter);12if (result.errors.length > 0) {13 console.log('Errors found: ' + result.errors);14}15else {16 console.log('Imposter is valid');17}18var mountebank = require('mountebank');19var imposter = {20 {21 {22 is: {23 }24 }25 }26};27var result = mountebank.validate(imposter, '1.0');28if (result.errors.length > 0) {29 console.log('Errors found: ' + result.errors);30}31else {32 console.log('Imposter is valid');33}
Using AI Code Generation
1const createImposterValidator = require('mountebank').createImposterValidator;2const validate = createImposterValidator();3const imposter = {4 {5 {6 is: {7 headers: {8 },9 body: {10 }11 }12 }13 }14};
Using AI Code Generation
1const mb = require('mountebank');2const validator = mb.createImposterValidator();3const options = {4 {5 {6 is: {7 }8 }9 }10};11validator.validate(options, function (error, result) {12 if (error) {13 console.error(error);14 } else {15 console.log(result);16 }17});
Using AI Code Generation
1var mb = require('mountebank');2var validator = mb.createImposterValidator();3var imposter = { protocol: 'http',4 stubs: [{ responses: [{ is: { body: 'Hello' } }] }] };5validator.validate(imposter, function (error, result) {6 console.log(error);7 console.log(result);8});9{ errors: [],10 imposter: { protocol: 'http', port: 4545, stubs: [Object] } }11> var mb = require('mountebank');12> var validator = mb.createImposterValidator();13> var imposter = { protocol: 'http',14> stubs: [{ responses: [{ is: { body: 'Hello' } }] }] };15> validator.validate(imposter, function (error, result) {16> console.log(error);17> console.log(result);18> });19> { errors: [],20> imposter: { protocol: 'http', port: 4545, stubs: [Object] } }
Using AI Code Generation
1var mb = require('mountebank');2var validator = mb.createImposterValidator();3var imposter = {4 {5 {6 is: {7 }8 }9 }10};11validator.validate(imposter);12{13}14{15}16var mb = require('mountebank');17var validator = mb.createImposterValidator();18var imposter = {19 {20 {21 is: {22 }23 }24 }25};26validator.validate(imposter);27{28}29{30}31var mb = require('mountebank');32var validator = mb.createImposterValidator();33var imposter = {34 {35 {36 is: {37 }38 }39 }40};41validator.validate(imposter);42{43}44{45}46var mb = require('mountebank');47var validator = mb.createImposterValidator();48var imposter = {49 {50 {51 is: {52 }53 }54 }55};56validator.validate(imposter);
Using AI Code Generation
1var mountebank = require('mountebank');2var port = 3000;3var imposter = {4 {5 {6 is: {7 headers: {8 }9 }10 }11 }12};13mountebank.createImposterValidator(imposter, function (error, imposter) {14 if (error) {15 console.log('Error in creating imposter: ' + error);16 } else {17 console.log('Imposter created successfully');18 }19});20{21 "scripts": {22 },23 "dependencies": {24 }25}26{27 "scripts": {
Using AI Code Generation
1const mb = require('mountebank'),2validator = require('mountebank/src/models/validators/validator'),3imposterValidator = validator.createImposterValidator(mb.logger),4imposter = {5"stubs": [{6"responses": [{7"is": {8}9}]10}]11}12imposterValidator.validate(imposter);13const mb = require('mountebank'),14validator = require('mountebank/src/models/validators/validator'),15imposterValidator = validator.createImposterValidator(mb.logger),16imposter = {17"stubs": [{18"responses": [{19"is": {20}21}]22}]23}24imposterValidator.validate(imposter);25const mb = require('mountebank'),26validator = require('mountebank/src/models/validators/validator'),27imposterValidator = validator.createImposterValidator(mb.logger),28imposter = {29"stubs": [{30"responses": [{31"is": {32}33}]34}]35}36imposterValidator.validate(imposter);37const mb = require('mountebank'),38validator = require('mountebank/src/models/validators/validator'),39imposterValidator = validator.createImposterValidator(mb.logger),40imposter = {41"stubs": [{42"responses": [{43"is": {44}45}]46}]47}48imposterValidator.validate(imposter);49const mb = require('mountebank'),50validator = require('mount
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!