/// /// /** * test util tool * @author vfasky * **/ 'use strict' import 'jsdom-global/register' import 'source-map-support/register' import { expect } from 'chai' import * as $ from 'jquery' import * as glob from 'glob' import * as path from 'path' import * as webpack from 'webpack' import * as CompilerPlugin from 'compiler-webpack-plugin' import * as nodeExternals from 'webpack-node-externals' import * as Mocha from 'mocha' export var global: any; let testApp export default { $, initApp, expect, getEmpty$Div, setup, onRender } interface SetupConfig { output: string; testFiles: string[]; webpackConfig?: any; } function onRender(component, done, time = 0){ component.off('rendered') setTimeout(() => { component.on('rendered', (...args)=>{ done.apply(this, args) component.off('rendered') }) }, time) } function setup(config: SetupConfig) { let testFiles = [] config.testFiles.forEach((file) => { testFiles = testFiles.concat(glob.sync(file).map((v) => { return path.resolve(v) })) }) let webpackConfig = Object.assign({ entry: { test: testFiles }, output: { path: config.output, filename: 'test.js' }, target: 'node', externals: [nodeExternals()], resolve: { extensions: ['', '.es6', '.js', '.ts', '.coffee', '.scss'], }, module: { loaders: [{ test: /\.tpl$/, loader: path.resolve(__dirname, '../node_modules/mcore3/dist/h2svd-loader.js') },{ test: /\.ts$/, loader: 'ts-loader' }, { test: /jquery[!mcore]/, loader: 'expose?$!expose?jQuery' }] }, ts: { logLevel: 'error', silent: true, transpileOnly: true }, devtool: '', plugins: [ new CompilerPlugin('done', function(){ let mocha = new Mocha({ ui: 'bdd' }) mocha.addFile(path.join(config.output, 'test.js')) mocha.run() }) ] }, config.webpackConfig || {} ) let compiler = webpack(webpackConfig) compiler.run(function(err, stats) { if (err) console.log(err) }) } function getApp() { return testApp } function initApp(TestApp, done) { testApp = new TestApp(getEmpty$Div()) return testApp } function getEmpty$Div() { return $('
') }