import Vue, { Component } from 'vue' import { SinonSpy } from 'sinon' import merge from 'lodash.merge' import { ILogger } from './log' export interface IComponents { [key: string]: Component } export class ComponentTest { public vm: Vue constructor (private template: string, private components: IComponents) { } public createComponent (createOptions?: any): void { let options = { template: this.template, components: this.components } if (createOptions) merge(options, createOptions) this.vm = new Vue(options).$mount() } public async execute (callback: (vm: Vue) => Promise | void): Promise { await Vue.nextTick() await callback(this.vm) } } export class MockLogger implements ILogger { constructor (private loggerSpy: SinonSpy) { } info (msg: any) { this.loggerSpy(msg) } warn (msg: any) { this.loggerSpy(msg) } error (msg: any) { this.loggerSpy(msg) } }