UNPKG

@revoloo/cypress6

Version:

Cypress.io end to end testing tool

141 lines (103 loc) 2.51 kB
const _ = require('lodash') class $Command { constructor (obj = {}) { this.reset() this.set(obj) } set (key, val) { let obj if (_.isString(key)) { obj = {} obj[key] = val } else { obj = key } _.extend(this.attributes, obj) return this } finishLogs () { // finish each of the logs we have return _.invokeMap(this.get('logs'), 'finish') } log (log) { // always set the chainerId of the log to ourselves // so it can be queried on later log.set('chainerId', this.get('chainerId')) this.get('logs').push(log) return this } getLastLog () { // return the last non-event log const logs = this.get('logs') if (logs.length) { for (let i = logs.length - 1; i >= 0; i--) { const log = logs[i] if (log.get('event') === false) { return log } } } } hasPreviouslyLinkedCommand () { const prev = this.get('prev') return !!(prev && (prev.get('chainerId') === this.get('chainerId'))) } is (str) { return this.get('type') === str } get (attr) { return this.attributes[attr] } toJSON () { return this.attributes } _removeNonPrimitives (args) { // if the obj has options and // log is false, set it to true for (let i = args.length - 1; i >= 0; i--) { const arg = args[i] if (_.isObject(arg)) { // filter out any properties which arent primitives // to prevent accidental mutations const opts = _.omitBy(arg, _.isObject) // force command to log opts.log = true args[i] = opts return } } } skip () { return this.set('skip', true) } stringify () { let { name, args } = this.attributes args = _.reduce(args, (memo, arg) => { arg = _.isString(arg) ? _.truncate(arg, { length: 20 }) : '...' memo.push(arg) return memo }, []) args = args.join(', ') return `cy.${name}('${args}')` } clone () { this._removeNonPrimitives(this.get('args')) return $Command.create(_.clone(this.attributes)) } reset () { this.attributes = {} this.attributes.logs = [] return this } static create (obj) { return new $Command(obj) } } // mixin lodash methods _.each(['pick'], (method) => { return $Command.prototype[method] = function (...args) { args.unshift(this.attributes) return _[method].apply(_, args) } }) module.exports = $Command