Best JavaScript code snippet using playwright-internal
weaver.js
Source: weaver.js
1'use strict';2/**3 * [weaver the middleware is uesd to get data form weaver]4 * [usage weaver([id1,id2])5 * ps 1.if parameter id include 'all',it will be replaced by idList , it means you will get all data6 */7var request = require('co-request');8var weaverTrigger = require('./weaver-trigger.js');9const _ = require('lodash');10const co = require('co');11var config = {12 defaultLang: 'zh',13 weaverHostName: 'http://sta.weaver.jiyu.tech',14 env: 'prod',15 sync: false16};17const weaverUrl = config.weaverHostName + '/tail/api/getValue?';18const jsonFileHandle = require('./jsonFile.js')();19const boneInfo = require(process.cwd() + '/package.json');20var weaverContext = {};21var packageContext = {};22var lastUpdate = 0;23var isRequesting = false;24var firstGetDataTimeOut;25var ids = [];26var commonIds = [];27var jsonFilePath = process.cwd() + '/weaver-data.json';28jsonFileHandle.initFile(jsonFilePath, {});29var savedWeaverContext = jsonFileHandle.readJsonFile(jsonFilePath);30if (savedWeaverContext.boneVersion != boneInfo.boneVersion) {31 jsonFileHandle.saveJsonFile(jsonFilePath, { boneVersion: boneInfo.boneVersion });32} else {33 weaverContext = savedWeaverContext.data;34}35var _validateConfig = function(config) {36 if (!config.mrechant) {37 console.error('weaveré
ç½®ä¸ç¼ºå°mrechant');38 return false;39 }40 return true;41};42var weaver = function() {43 //compatible ç¡®ä¿idList为array,idList为å½åè·¯ç±çæækey44 var idList = _.flattenDeep(arguments);45 var temporaryIdList = _.flattenDeep(arguments[1]);46 //åå¹¶ææç¨å°çid,é¤äºall,ids为æ¬ç«ç¹ç¨å°çææçkey47 ids = _.union(ids, _.difference(idList, ['all']));48 //è®¾ç½®å®æ¶å»è·åç¬¬ä¸æ¬¡æ°æ®ï¼åªä¼å¨ææidå è½½ç»æåå»è·å49 try {50 clearTimeout(firstGetDataTimeOut);51 firstGetDataTimeOut = setTimeout(getWeaverContext, 100);52 } catch (e) {53 console.error(e);54 }55 var fn = {};56 fn.getWeaverContext = getWeaverContext;57 /**58 * [nowTime è·åå½åæ¶é´ï¼Unixæ¶é´æ³](private)59 * @return {[type]} [description]60 */61 var nowTime = function() {62 return parseInt((new Date()).getTime() / 1000, 10);63 };64 /**65 * [getFilterParam è·åå¯¹è±¡ä¸æækey为filter_å¼å¤´ç对象ï¼ç»æä¸ä¸ªæ°ç对象]66 * @param {[type]} query [æºå¯¹è±¡]67 * @return {[type]} [æ°ç对象]68 */69 var getFilterParam = function(query) {70 var filterValue = {};71 _.forEach(query, function(v, k) {72 if (/^filter_/.test(k)) {73 let filterKey = _.camelCase(k.replace('filter_', ''));74 filterValue[filterKey] = v;75 }76 });77 return filterValue;78 };79 var divideWeaverDataByLang = function(weaverData) {80 var res = {};81 _.forEach(weaverData, function(data, key) {82 try {83 // listæ°æ®84 if (_.isArray(data)) {85 _.forEach(data, function(list) {86 _.forEach(list.value, function(value, lang) {87 res[lang] = res[lang] || {};88 res[lang][key] = res[lang][key] || [];89 res[lang][key].push(_.extend({ $indexId: list.schemaId }, value));90 });91 });92 } else if (data.value) { // defaultæ°æ®93 _.forEach(data.value, function(value, lang) {94 res[lang] = res[lang] || {};95 res[lang][key] = value;96 });97 }98 } catch (e) {99 console.error(e);100 }101 });102 return res;103 };104 var addToWeaverContext = function(data) {105 _.forEach(data, function(everyLangData, lang) {106 weaverContext[lang] = _.assignIn({}, weaverContext[lang], everyLangData);107 });108 };109 /**110 * [getWeaverContext è·åidsé颿æçæ°æ®ï¼ä½¿ç¨postæ¹å¼](private)111 * @return {[empty]} [null]112 */113 function getWeaverContext(once) {114 co(function*() {115 console.log('send request');116 console.log(new Date());117 isRequesting = true;118 try {119 var result = yield request.post({120 uri: weaverUrl,121 method: 'POST',122 json: {123 id: ids,124 boneVersion: boneInfo.boneVersion,125 lastUpdate: lastUpdate,126 mrechant: config.mrechant127 }128 });129 isRequesting = false;130 lastUpdate = nowTime();131 if (result && result.statusCode == 200) {132 if (!result.body.errCode) {133 let res = divideWeaverDataByLang(result.body.data);134 addToWeaverContext(res);135 _.extend(packageContext, result.body.packageInfo);136 jsonFileHandle.saveJsonFile(jsonFilePath, { boneVersion: boneInfo.boneVersion, data: weaverContext });137 } else {138 console.error(result.body.errCode);139 }140 }141 } catch (e) {142 console.log(e);143 }144 });145 }146 /**147 * [get è·åæå®keyçæ°æ®]148 * @param {[String]} key [è·åæ°æ®çkey]149 * @return {[Object]}150 */151 fn.get = function(key) {152 return this.renderMixin.weaverResult[key];153 };154 /**155 * [set è®¾å®æå®keyçæ°æ®]156 * @param {[String]} key [è·åæ°æ®çkey]157 * @param {[Object]} object [æ°æ®]158 */159 fn.set = function(key, object) {160 if (!this.renderMixin.weaverResult[key]) return false;161 return this.renderMixin.weaverResult[key] = object;162 };163 /**164 * [getListData è·åæå®åºåçæ°æ®ï¼sliceï¼ï¼æ°æ®ä¼èªå¨ç»å®å°weaverResultä¸](public)165 * @param {[type]} key [è·åæ°æ®çkey]166 * @param {[type]} start [å¼å§çä½ç½®ï¼>=0ï¼]167 * @param {[type]} end [ç»æçä½ç½®]168 * @return {[type]} [åºåæ°æ®]169 */170 fn.getListData = function(key, start, end, filterValue) {171 if (!this.renderMixin.weaverResult[key]) return;172 var filterData = [];173 if (filterValue) {174 filterData = this.weaverFn.getDataFromListByFields(key, filterValue);175 } else {176 filterData = this.renderMixin.weaverResult[key];177 }178 this.renderMixin.weaverResult[key] = filterData.slice(start, end);179 return {180 start: start,181 end: end,182 totalNumber: parseInt(filterData.length, 10)183 };184 };185 /**186 * [getListDataByPagination éè¿å页æ¥è·åæ°æ®ï¼æ°æ®ä¼èªå¨ç»å®å°weaverResultä¸ï¼å
é¨çè·åæ°æ®çå®ç°æ¯è°ç¨äºgetListData](public)187 * @param {[type]} key [è·åæ°æ®çkey]188 * @param {[type]} pageNumber [页ç (>=1)]189 * @param {[type]} pageSize [æ¯é¡µæ°é]190 * @return {[type]} [å页信æ¯]191 */192 fn.getListDataByPagination = function(key, pageNumber, pageSize, filterValue) {193 if (!this.renderMixin.weaverResult[key]) return;194 var res = fn.getListData.call(this, key, (pageNumber - 1) * pageSize, pageNumber * pageSize, filterValue);195 let totalNumber = res.totalNumber;196 let totalPages = Math.ceil(totalNumber / pageSize);197 return {198 totalNumber: parseInt(totalNumber, 10),199 totalPages: parseInt(totalPages, 10),200 pageNumber: parseInt(pageNumber, 10),201 pageSize: parseInt(pageSize, 10)202 };203 };204 /**205 * [getDataFromListByID è·åå°æå®keyä¸çæå®idçæ°æ®ï¼åªå¯ä»¥ç¨äºListæ°æ®ï¼å ä¸ºåªæListææidï¼$indexIdï¼](public)206 * @param {[String]} key [keyName]207 * @param {[int]} $indexId [id]208 * @return {[Object]} [data]209 */210 fn.getDataFromListByID = function(key, $indexId, onlyReturn) {211 var datas = this.renderMixin.weaverResult[key];212 var res = _.find(datas, function(o) {213 return o.$indexId == $indexId;214 });215 if (onlyReturn) {216 return res;217 }218 this.renderMixin.weaverResult[key] = res;219 return res;220 };221 fn.getDataFromListByFieldName = function(key, fieldName, fieldValue) {222 var datas = this.renderMixin.weaverResult[key];223 return _.find(datas, function(o) {224 return o[fieldName].toUpperCase() == fieldValue.toUpperCase();225 });226 }227 /**228 * [getDataFromListByFields 夿¡ä»¶çé]229 * @param {[type]} key [key]230 * @param {[type]} filterValue [å 鿡件]231 * @return {[type]} [description]232 */233 fn.getDataFromListByFields = function(key, filterValue) {234 var datas = this.renderMixin.weaverResult[key];235 var filterData = [];236 _.forEach(datas, function(v, k) {237 _.every(filterValue, function(d, o) {238 if (!_.isArray(d)) d = [d];239 return _.includes(d, v[o]);240 }) && filterData.push(v);241 });242 return filterData;243 };244 /**245 * [changeLang ä¿®æ¹è¯è¨](public)246 * @param {[String]} newLang [æ°çè¯è¨ç®å]247 * @return {[bool]} [true]248 */249 fn.changeLang = function(newLang) {250 this.cookies.set('lang', newLang);251 return true;252 };253 /**254 * [getPreId è·åæå®idçåä¸ä¸ªæ°æ®ï¼è¿éçåä¸ä¸ªæ¯ææ°ç»éä½ç½®åä¸ä¸ªï¼æ æè°æ¶é´é¡ºåºï¼è¿ä¸ªäº¤ç±å¼åè
夿]255 * @param {[type]} key [description]256 * @param {[type]} id [description]257 * @return {[type]} [description]258 */259 fn.getPreId = function(key, id) {260 var datas = this.renderMixin.weaverResult[key];261 var index = -1;262 //è·åidå¨å½åæ°æ®çåºå·263 _.find(datas, function(o, k) {264 if (o.$indexId == id) {265 index = k;266 return true;267 }268 return false;269 });270 if (index != -1 && datas[index - 1]) {271 return datas[index - 1].$indexId;272 } else {273 return false;274 }275 };276 /**277 * [getAfterId è·åæå®idçåä¸ä¸ªæ°æ®ï¼è¿éçåä¸ä¸ªæ¯ææ°ç»éä½ç½®åä¸ä¸ªï¼æ æè°æ¶é´é¡ºåºï¼è¿ä¸ªäº¤ç±å¼åè
夿]278 * @param {[type]} key [description]279 * @param {[type]} id [description]280 * @return {[type]} [description]281 */282 fn.getAfterId = function(key, id) {283 var datas = this.renderMixin.weaverResult[key];284 var index = -1;285 //è·åidå¨å½åæ°æ®çåºå·286 _.find(datas, function(o, k) {287 if (o.$indexId == id) {288 index = k;289 return true;290 }291 return false;292 });293 if (index != -1 && datas[index + 1]) {294 return datas[index + 1].$indexId;295 } else {296 return false;297 }298 };299 fn.removeTemporaryId = function() {300 _.forEach(temporaryIdList, function(o) {301 delete this.renderMixin.weaverResult[o];302 }.bind(this));303 };304 return function*(next) {305 var params = this.request.query;306 var reqtime = new Date().getTime();307 var weaverResult = {};308 var packageInfo = {};309 var lang = this.query.lang || this.cookies.get('lang') || config.defaultLang;310 idList = _.union(idList, commonIds);311 //èªå¨æ·»å urlä¸çkeyå°idListä¸312 if (params.key) {313 idList = _.union(idList, _.isArray(params.key) ? params.key : [params.key], commonIds);314 }315 //妿idList䏿allåè·åæ¬ç«ç¹ææçidï¼ç´æ¥è·åidsï¼316 if (_.indexOf(idList, 'all') != '-1') {317 idList = ids;318 }319 if (config.sync || (params && params.mode == 'dev' && params.expireTime && params.expireTime - reqtime > 0 && params.expireTime - reqtime < 86400000)) {320 //è·åææidçé¢è§æ°æ®321 var result = yield request.post({322 uri: weaverUrl,323 method: "POST",324 json: {325 id: idList,326 boneVersion: boneInfo.boneVersion,327 lastUpdate: lastUpdate,328 mode: 'preview',329 mrechant: config.mrechant330 }331 });332 if (result && result.statusCode == 200) {333 if (!result.body.errCode) {334 let res = divideWeaverDataByLang(result.body.data);335 _.extend(weaverResult, res[lang]);336 _.extend(packageInfo, result.body.packageInfo);337 } else {338 console.error(result.body.errCode);339 }340 }341 } else {342 //è·åweaveræ°æ®åpackageæ°æ®343 _.forEach(idList, function(v) {344 weaverResult[v] = _.cloneDeep(weaverContext[lang][v]);345 packageInfo[v] = _.cloneDeep(packageContext[v]);346 });347 }348 this.weaverFn = {};349 _.forEach(fn, function(d, k) {350 this.weaverFn[k] = d.bind(this);351 }.bind(this));352 this.renderMixin.weaverResult = weaverResult;353 this.renderMixin.packageInfo = packageInfo;354 this.renderMixin.lang = lang;355 this.renderMixin.weaverHostName = config.weaverHostName;356 if (this.query.key) {357 let key = _.camelCase(this.query.key);358 if (this.query.id) {359 this.renderMixin.weaverResult.detailInfo = this.weaverFn.getDataFromListByID(key, this.query.id);360 this.renderMixin.weaverResult[this.query.key] = undefined;361 }362 if (this.query.pn) {363 let filterValue = getFilterParam(this.query);364 this.weaverFn.getListDataByPagination(key, this.query.pn, this.query.ps || 10, filterValue);365 }366 if (this.query.start && this.query.end) {367 let filterValue = getFilterParam(this.query);368 this.weaverFn.getListData(key, this.query.start, this.query.end, filterValue);369 }370 }371 this.weaverFn.removeTemporaryId();372 yield next;373 };374};375weaver.setCommonKey = function(commonIdList) {376 commonIds = commonIdList;377 ids = ids.concat(commonIds);378};379module.exports = function(s, selfConfig) {380 config.env = s.env;381 if (config.env === 'dev') {382 config.sync = true;383 }384 if (selfConfig.proxy) {385 request = request.defaults({ 'proxy': selfConfig.proxy });386 }387 config = _.assignIn(config, selfConfig);388 // ä¿è¯çº¿ä¸ç¯å¢ä¸å®æ¯å¼æ¥è·åæ°æ®389 if (config.env === 'prod') {390 config.sync = false;391 }392 let res = _validateConfig(config);393 s.router.post('/weaverTrigger', weaver(), weaverTrigger);394 s.router.post('/getWeaverData', weaver('all'), require('./getWeaverData.js'));395 if (res) {396 return weaver;397 } else {398 process.exit();399 }...
LayeredComponentMixin.spec.js
Source: LayeredComponentMixin.spec.js
...4import TestUtils from 'react-addons-test-utils';5import LayeredComponentMixin from '../../app/js/mixins/LayeredComponentMixin';6describe('Mixin: LayeredComponent', function() {7 let rendered;8 function renderMixin() {9 const ParentComponent = React.createClass({10 mixins: [LayeredComponentMixin],11 renderLayer() { return <div />; },12 render() { return null; }13 });14 rendered = TestUtils.renderIntoDocument(15 <ParentComponent />16 );17 }18 describe('#componentDidMount', function() {19 it('should set this._target', function() {20 renderMixin();21 assert.isDefined(rendered._target);22 });23 it('should append an element to the DOM', function() {24 sandbox.stub(document.body, 'appendChild');25 renderMixin();26 sinon.assert.calledOnce(document.body.appendChild);27 });28 it('should call this._renderLayer', function() {29 sandbox.stub(LayeredComponentMixin, '_renderLayer');30 renderMixin();31 sinon.assert.calledOnce(LayeredComponentMixin._renderLayer);32 });33 });34 describe('#componentDidUpdate', function() {35 beforeEach(function() {36 sandbox.stub(LayeredComponentMixin, '_renderLayer');37 renderMixin();38 LayeredComponentMixin._renderLayer.reset();39 });40 it('should call this._renderLayer', function() {41 rendered.componentDidUpdate();42 sinon.assert.calledOnce(LayeredComponentMixin._renderLayer);43 });44 });45 describe('#componentWillUnmount', function() {46 beforeEach(function() {47 sandbox.stub(document.body,'removeChild');48 sandbox.stub(LayeredComponentMixin, '_unrenderLayer');49 renderMixin();50 });51 it('should call this._unrenderLayer', function() {52 rendered.componentWillUnmount();53 sinon.assert.calledOnce(LayeredComponentMixin._unrenderLayer);54 });55 it('should call remove this._target from the DOM', function() {56 rendered.componentWillUnmount();57 sinon.assert.calledOnce(document.body.removeChild);58 });59 });60 describe('#_renderLayer', function() {61 beforeEach(function() {62 renderMixin();63 });64 it('should call ReactDOM.render', function() {65 sandbox.stub(ReactDOM, 'render');66 rendered._renderLayer();67 sinon.assert.calledOnce(ReactDOM.render);68 });69 it('should call this._bindEscapeListener', function() {70 sandbox.stub(rendered, '_bindEscapeListener');71 rendered._renderLayer();72 sinon.assert.calledOnce(rendered._bindEscapeListener);73 });74 });75 describe('#_unrenderLayer', function() {76 beforeEach(function() {77 renderMixin();78 });79 it('should call ReactDOM.unmountComponentAtNode', function() {80 sandbox.stub(ReactDOM, 'unmountComponentAtNode');81 rendered._unrenderLayer();82 sinon.assert.calledOnce(ReactDOM.unmountComponentAtNode);83 });84 it('should call this._unbindEscapeListener', function() {85 sandbox.stub(rendered, '_unbindEscapeListener');86 rendered._unrenderLayer();87 sinon.assert.calledOnce(rendered._unbindEscapeListener);88 });89 });90 describe('#_bindEscapeListener', function() {91 beforeEach(function() {92 renderMixin();93 });94 it('should add a global event listener for the escape key to trigger _unrenderLayer', function() {95 const evt = new KeyboardEvent('keydown', {96 keyCode: 27,97 which: 2798 });99 sandbox.stub(rendered, '_unrenderLayer');100 rendered._bindEscapeListener();101 document.dispatchEvent(evt);102 sinon.assert.calledOnce(rendered._unrenderLayer);103 });104 });105 describe('#_unbindEscapeListener', function() {106 beforeEach(function() {107 renderMixin();108 });109 it('should remove the global listener for the escape key', function() {110 const evt = new KeyboardEvent('keydown', {111 keyCode: 27,112 which: 27113 });114 sandbox.stub(rendered, '_unrenderLayer');115 rendered._unbindEscapeListener();116 document.dispatchEvent(evt);117 sinon.assert.notCalled(rendered._unrenderLayer);118 });119 });...
main.js
Source: main.js
1var React = global.React || require('react');2var action = require('./action.js');3var EventEmitter = require('eventemitter2').EventEmitter2;4var safeDeepClone = require('./safeDeepClone.js');5var RenderMixin = require('./RenderMixin.js');6var flux = {};7function mergeStore (mixins, source) {8 source.actions = source.actions || [];9 source.exports = source.exports || {};10 if (mixins && Array.isArray(mixins)) {11 // Merge mixins and state12 mixins.forEach(function (mixin) {13 Object.keys(mixin).forEach(function (key) {14 switch(key) {15 case 'mixins':16 return mergeStore(mixin.mixins, mixin);17 case 'actions':18 source.actions = source.actions.concat(mixin.actions);19 break;20 case 'exports':21 Object.keys(mixin.exports).forEach(function (key) {22 source.exports[key] = mixin.exports[key];23 });24 break;25 default:26 if (source[key]) {27 throw new Error('The property: ' + key + ', already exists. Can not merge mixin with keys: ' + Object.keys(mixin).join(', '));28 }29 source[key] = mixin[key];30 }31 });32 });33 }34 var exports = new EventEmitter({35 wildcard: true36 });37 source.emitChange = function () {38 setTimeout(function () { // Async to avoid running within render of component39 exports.emit('change');40 }, 0);41 };42 source.emit = function () {43 var args = arguments;44 setTimeout(function () { // Async to avoid running within render of component45 exports.emit.apply(exports, args);46 }, 0);47 };48 exports.addChangeListener = function (callback) {49 exports.on('change', callback);50 };51 exports.removeChangeListener = function (callback) {52 exports.removeListener('change', callback);53 };54 // Register actions55 source.actions.forEach(function (action) {56 if (!action || !action.handlerName) {57 throw new Error('This is not an action ' + action);58 }59 if (!source[action.handlerName]) {60 throw new Error('There is no handler for action: ' + action);61 }62 action.on('trigger', source[action.handlerName].bind(source));63 });64 // Register exports65 Object.keys(source.exports).forEach(function (key) {66 exports[key] = function () {67 return safeDeepClone('[Circular]', [], source.exports[key].apply(source, arguments));68 };69 });70 return exports;71};72flux.debug = function () {73 global.React = React;74};75flux.createActions = function () {76 return action.apply(null, arguments);77};78flux.createStore = function (definition) {79 return mergeStore(definition.mixins, definition);80};81flux.RenderMixin = RenderMixin;82// If running in global mode, expose $$83if (!global.exports && !global.module && (!global.define || !global.define.amd)) {84 global.flux = flux;85}...
LoggedInRouteMixin.spec.js
Source: LoggedInRouteMixin.spec.js
...6import LoginPage from '../../app/js/pages/LoginPage';7import LoggedInRouteMixin from '../../app/js/mixins/LoggedInRouteMixin';8describe('Mixin: LoggedInRoute', function() {9 let rendered;10 function renderMixin() {11 const ParentComponent = React.createClass({12 mixins: [LoggedInRouteMixin],13 render() { return null; }14 });15 rendered = TestUtils.renderIntoDocument(16 <ParentComponent />17 );18 }19 it('#componentDidMount should call _doLoginRedirect if the user has been checked and not found', function() {20 CurrentUserStore.hasChecked = true;21 CurrentUserStore.user = {};22 sandbox.stub(LoggedInRouteMixin, '_doLoginRedirect');23 renderMixin();24 sinon.assert.calledOnce(LoggedInRouteMixin._doLoginRedirect);25 });26 it('#componentDidMount should start listening to CurrentUserStore if no user has been checked and/or found', function() {27 CurrentUserStore.hasChecked = false;28 sandbox.stub(ListenerMixin, 'listenTo');29 renderMixin();30 sinon.assert.calledOnce(ListenerMixin.listenTo);31 sinon.assert.calledWith(ListenerMixin.listenTo, CurrentUserStore, sinon.match.func);32 });33 it('#_doLoginRedirect should define the attempted transition on LoginPage and do the redirect', function() {34 renderMixin();35 rendered.history = {36 replaceState: sandbox.stub()37 };38 rendered._doLoginRedirect();39 assert.deepEqual(LoginPage.attemptedTransition, {40 path: '/',41 query: {}42 });43 sinon.assert.calledOnce(rendered.history.replaceState);44 sinon.assert.calledWith(rendered.history.replaceState, null, '/login');45 });46 it('#_onCurrentUserStoreChange should call _doLoginRedirect if no user is logged in', function() {47 sandbox.stub(LoggedInRouteMixin, '_doLoginRedirect');48 renderMixin();49 rendered._onCurrentUserStoreChange(null, null);50 sinon.assert.calledOnce(LoggedInRouteMixin._doLoginRedirect);51 });...
LoggedOutRouteMixin.spec.js
Source: LoggedOutRouteMixin.spec.js
...8import LoggedOutRouteMixin from '../../app/js/mixins/LoggedOutRouteMixin';9describe('Mixin: LoggedOutRoute', function() {10 const USER = copyObject(testHelpers.fixtures.user);11 let rendered;12 function renderMixin() {13 const ParentComponent = React.createClass({14 mixins: [LoggedOutRouteMixin],15 render() { return null; }16 });17 rendered = TestUtils.renderIntoDocument(18 <ParentComponent />19 );20 }21 it('#componentDidMount should call _doRedirect if the user has been checked and found', function() {22 CurrentUserStore.hasChecked = true;23 CurrentUserStore.user = USER;24 sandbox.stub(LoggedOutRouteMixin, '_doRedirect');25 renderMixin();26 sinon.assert.calledOnce(LoggedOutRouteMixin._doRedirect);27 });28 it('#componentDidMount should start listening to CurrentUserStore if no user has been checked and/or found', function() {29 CurrentUserStore.hasChecked = false;30 sandbox.stub(ListenerMixin, 'listenTo');31 renderMixin();32 sinon.assert.calledOnce(ListenerMixin.listenTo);33 sinon.assert.calledWith(ListenerMixin.listenTo, CurrentUserStore, sinon.match.func);34 });35 it('#_doRedirect should do the redirect', function() {36 renderMixin();37 rendered.history = {38 replaceState: sandbox.stub()39 };40 rendered._doRedirect();41 sinon.assert.calledOnce(rendered.history.replaceState);42 sinon.assert.calledWith(rendered.history.replaceState, null, '/');43 });44 it('#_onCurrentUserStoreChange should call _doRedirect if user is logged in', function() {45 sandbox.stub(LoggedOutRouteMixin, '_doRedirect');46 renderMixin();47 rendered._onCurrentUserStoreChange(null, USER);48 sinon.assert.calledOnce(LoggedOutRouteMixin._doRedirect);49 });...
program-base.js
Source: program-base.js
1import RenderMixin from '../../node_modules/custom-renderer-mixin/src/render-mixin';2import PropertyMixin from '../../node_modules/backed/src/mixins/property-mixin';3import CSSMixin from '../../node_modules/backed/src/mixins/css-mixin';4/**5 * @param {HTMLElement} base The class to extend on.6 */7export default (base = HTMLElement) => class ProgramBase extends CSSMixin(RenderMixin(PropertyMixin(base))) {8 static get properties() {9 return system.merge(super.properties, {10 name: {11 value: 'Program'12 }13 })14 }15 constructor() {16 super();17 // ensure everything is encapsulated18 // attachShadow when RenderMixin hasn't attached one.19 if (!this.shadowRoot) this.attachShadow({mode: 'open'});20 }21 get properties() {22 return customElements.get(this.localName).properties;23 }24 get template() {25 return customElements.get(this.localName).template;26 }27 connectedCallback() {28 if (super.connectedCallback) super.connectedCallback();29 if (this.beforeRenderCallback) this.beforeRenderCallback();30 // this.render();31 if (this.afterRenderCallback) this.afterRenderCallback();32 }...
index.js
Source: index.js
...15initMixin(Vue)16stateMixin(Vue)17eventsMixin(Vue)18lifecycleMixin(Vue)19renderMixin(Vue)...
vue.js
Source: vue.js
...6}7// æ©å±åå,æ©å±äº_initæ¹æ³8initMixin(Vue)9lifecycleMixin(Vue)...
Using AI Code Generation
1const { renderMixin } = require('playwright/lib/server/supplements/mixins/renderMixin');2const { Page } = require('playwright/lib/server/page');3const { ElementHandle } = require('playwright/lib/server/dom');4const { Frame } = require('playwright/lib/server/frame');5const { JSHandle } = require('playwright/lib/server/javascript');6const { DOMWorld } = require('playwright/lib/server/domworld');7const { EventEmitter } = require('events');8const { BrowserContext } = require('playwright/lib/server/browserContext');9const { Browser } = require('playwright/lib/server/browser');10const { helper } = require('playwright/lib/server/helper');11const { Connection } = require('playwright/lib/server/connection');12const { Transport } = require('playwright/lib/server/transport');13const { assert } = require('playwright/lib/server/helper');14const { debugLogger } = require('playwright/lib/server/debugLogger');15const { createGuid } = require('playwright/lib/server/utils');16const connection = new Connection();17connection.onmessage = message => console.log(message);18connection.onclose = () => console.log('Connection closed');19connection.onstall = () => console.log('Connection stalled');20const transport = new Transport(connection, debugLogger);21transport.onmessage = message => console.log(message);22transport.onclose = () => console.log('Transport closed');23const browser = new Browser(transport, 'browser', { browserName: 'chromium', browserVersion: '89.0.4389.0' }, false);24browser._isRemote = true;25const browserContext = new BrowserContext(browser, 'browserContext', { viewport: null, userAgent: null, javaScriptEnabled: true });26browserContext._isRemote = true;27const page = new Page(browserContext, 'page', { viewportSize: null, isClosed: false, opener: null, mainFrameId: 'frame' });28page._isRemote = true;29frame._isRemote = true;30const domWorld = new DOMWorld(frame, 'domWorld', { name: '', frameId: '
Using AI Code Generation
1const { renderMixin } = require('playwright/lib/server/supplements/mixins/render');2const { Page } = require('playwright/lib/server/page');3const { Frame } = require('playwright/lib/server/frame');4const { ElementHandle } = require('playwright/lib/server/dom');5const { JSHandle } = require('playwright/lib/server/jsHandle');6const { helper } = require('playwright/lib/server/helper');7renderMixin(Page);8renderMixin(Frame);9renderMixin(ElementHandle);10renderMixin(JSHandle);11(async () => {12 const browser = await chromium.launch();13 const page = await browser.newPage();14 const elementHandle = await page.$('text=Get started');15 const snapshot = await elementHandle.render();16 console.log(snapshot);17 await browser.close();18})();19const { renderMixin } = require('playwright/lib/server/supplements/mixins/render');20const { Page } = require('playwright/lib/server/page');21const { Frame } = require('playwright/lib/server/frame');22const { ElementHandle } = require('playwright/lib/server/dom');23const { JSHandle } = require('playwright/lib/server/jsHandle');24const { helper } =
Using AI Code Generation
1const { renderMixin } = require('playwright-internal');2const { test } = require('playwright-test');3test('basic test', async ({ page }) => {4 await renderMixin(page, 'test');5});6const { test } = require('playwright-test');7test('basic test', async ({ page }) => {8 await page.render('test');9});
Using AI Code Generation
1const { renderMixin } = require('@playwright/test/lib/test');2const { test } = require('@playwright/test');3test.describe('My test', () => {4 test.beforeEach(async ({ page }) => {5 await renderMixin(page);6 });7 test('test', async ({ page }) => {8 await page.click('text=Get started');9 await page.click('text=Docs');10 await page.click('text=API');11 await page.click('text=Playwright');
Using AI Code Generation
1const { renderMixin } = require('@playwright/test');2module.exports = renderMixin;3const { test, expect } = require('@playwright/test');4const render = require('./test.js');5test('my test', async ({ page }) => {6 const myPage = await render(page, 'my-page');7 await expect(myPage).toHaveSelector('text=Get started');8});9const { test, expect } = require('@playwright/test');10const { renderMixin } = require('@playwright/test');11const render = renderMixin();12test('my test', async ({ page }) => {13 const myPage = await render(page, 'my-page');14 await expect(myPage).toHaveSelector('text=Get started');15});
Using AI Code Generation
1const { renderMixin } = require('playwright-internal');2renderMixin.setRenderer(new MyRenderer());3const { renderMixin } = require('playwright');4renderMixin.setRenderer(new MyRenderer());5const { renderMixin } = require('playwright-internal');6renderMixin.setRenderer(new MyRenderer());7const { renderMixin } = require('playwright');8renderMixin.setRenderer(new MyRenderer());9const { renderMixin } = require('playwright-internal');10renderMixin.setRenderer(new MyRenderer());11const { renderMixin } = require('playwright');12renderMixin.setRenderer(new MyRenderer());13const { renderMixin } = require('playwright-internal');14renderMixin.setRenderer(new MyRenderer());15const { renderMixin } = require('playwright-internal');16renderMixin.setRenderer(new MyRenderer());17const { renderMixin } = require('playwright');18renderMixin.setRenderer(new MyRenderer());19const { renderMixin } = require('playwright');20renderMixin.setRenderer(new MyRenderer());21const { renderMixin } = require('playwright-internal');22renderMixin.setRenderer(new MyRenderer());23const { renderMixin } = require('playwright');24renderMixin.setRenderer(new MyRenderer());
Using AI Code Generation
1const { renderMixin } = require('playwright-internal');2renderMixin.setRenderer(new MyRenderer());3const { renderMixin } = require('playwright');4renderMixin.setRenderer(new MyRenderer());5const { renderMixin } = require('playwright-internal');6renderMixin.setRenderer(new MyRenderer());7const { renderMixin } = require('playwright');8renderMixin.setRenderer(new MyRenderer());9const { renderMixin } = require('playwright-internal');10renderMixin.setRenderer(new MyRenderer());11const { renderMixin } = require('playwright');12renderMixin.setRenderer(new MyRenderer());13const { renderMixin } = require('playwright-internal');14renderMixin.setRenderer(new MyRenderer());15const { renderMixin } = require('playwright-internal');16renderMixin.setRenderer(new MyRenderer());17const { renderMixin } = require('playwright');18renderMixin.setRenderer(new MyRenderer());19const { renderMixin } = require('playwright');20renderMixin.setRenderer(new MyRenderer());21const { renderMixin } = require('playwright-internal');22renderMixin.setRenderer(new MyRenderer());23const { renderMixin } = require('playwright');24renderMixin.setRenderer(new MyRenderer());
Using AI Code Generation
1const { renderMixin } = require('@playwright/test');2module.exports = renderMixin(async ({page}, run, testInfo) => {3 await run();4});5const { test } = require('@playwright/test');6const { renderMixin } = require('./test');7test.use(renderMixin);8test('My first test', async ({ page }) => {9 const title = await page.innerText('.navbar__inner .navbar__title');10 expect(title).toBe('Playwright');11});12const { test } = require('@playwright/test');13const { renderMixin } = require('./test');14test.use(renderMixin);15test('My first test', async ({ page }) => {16 const title = await page.innerText('.navbar__inner .navbar__title');17 expect(title).toBe('Playwright');18});19const { test } = require('@playwright/test');20const { renderMixin } = require('./test');21test.use(renderMixin);22test('My first test', async ({ page }) => {23 const title = await page.innerText('.navbar__;
Using AI Code Generation
1const {render} = require('@playwright/test')inner .navbar__title');2 expect(title).toBe('Playwright');3})code to use renderMixin method of Playwright4const {render} = require('playwright');5render('my test', async ({page}) => {6});7const {test} = require('@playwright/test');8test('my test', async ({page}) => {9});;10test('My second test', async ({ page, waitForElement }) => {11 await waitForElement('.navbar__inner .navbar__title');12 const title = await page.innerText('.navbar__inner .navbar__title');13 expect(title).toBe('Playwright');14});15const { renderMixin } = require('@playwright/test');16module.exports = renderMixin(async ({page}, run, testInfo) => {17 await run();
Using AI Code Generation
1const { renderMixin } = require('playwright/lib/internal/inspectorHelper');2const { Page } = require('playwright/lib/server/page');3const { ElementHandle } = require('playwright/lib/server/dom');4renderMixin(Page.prototype);5renderMixin(ElementHandle.prototype);6const { chromium } = require('playwright');7(async () => {8 const browser = await chromium.launch();9 const context = await browser.newContext();10 const page = await context.newPage();11 await page.render('example.png');12 await browser.close();13})();
Is it possible to get the selector from a locator object in playwright?
firefox browser does not start in playwright
firefox browser does not start in playwright
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
Jest + Playwright - Test callbacks of event-based DOM library
Well this is one way, but not sure if it will work for all possible locators!.
// Get a selector from a playwright locator
import { Locator } from "@playwright/test";
export function extractSelector(locator: Locator) {
const selector = locator.toString();
const parts = selector.split("@");
if (parts.length !== 2) { throw Error("extractSelector: susupect that this is not a locator"); }
if (parts[0] !== "Locator") { throw Error("extractSelector: did not find locator"); }
return parts[1];
}
Check out the latest blogs from LambdaTest on this topic:
Selenium, a project hosted by the Apache Software Foundation, is an umbrella open-source project comprising a variety of tools and libraries for test automation. Selenium automation framework enables QA engineers to perform automated web application testing using popular programming languages like Python, Java, JavaScript, C#, Ruby, and PHP.
Unit and functional testing are the prime ways of verifying the JavaScript code quality. However, a host of tools are available that can also check code before or during its execution in order to test its quality and adherence to coding standards. With each tool having its unique features and advantages contributing to its testing capabilities, you can use the tool that best suits your need for performing JavaScript testing.
Traditional software testers must step up if they want to remain relevant in the Agile environment. Agile will most probably continue to be the leading form of the software development process in the coming years.
Even though several frameworks are available in the market for automation testing, Selenium is one of the most renowned open-source frameworks used by experts due to its numerous features and benefits.
When I started writing tests with Cypress, I was always going to use the user interface to interact and change the application’s state when running tests.
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!