Skip to content

Commit

Permalink
Setup test environment and provide first tests 🌟
Browse files Browse the repository at this point in the history
  • Loading branch information
devtonhere committed Feb 14, 2019
1 parent fd86c72 commit b535718
Show file tree
Hide file tree
Showing 5 changed files with 316 additions and 12 deletions.
148 changes: 148 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"dev": "run-p serve watch:*",
"dev:ssr": "run-p serve:ssr watch:*",
"lint": "eslint {src,packages} --fix",
"test": "run-p lint",
"test": "mocha",
"css": "stylus src/themes/*.styl -u autoprefixer-stylus",
"watch:css": "run-p 'css -- -o themes -w'",
"watch:js": "node build/build.js",
Expand All @@ -51,6 +51,7 @@
},
"devDependencies": {
"autoprefixer-stylus": "^0.14.0",
"chai": "^4.2.0",
"chokidar": "^2.0.2",
"conventional-changelog-cli": "^1.3.5",
"cross-env": "^5.1.3",
Expand All @@ -61,6 +62,7 @@
"jsdom": "^13.2.0",
"lerna": "^2.5.1",
"live-server": "^1.2.1",
"mocha": "^5.2.0",
"npm-run-all": "^4.1.5",
"rimraf": "^2.6.2",
"rollup": "^0.53.3",
Expand All @@ -70,7 +72,8 @@
"rollup-plugin-node-resolve": "^3.0.0",
"rollup-plugin-replace": "^2.0.0",
"rollup-plugin-uglify": "^2.0.1",
"stylus": "^0.54.5"
"stylus": "^0.54.5",
"xhr2": "^0.1.4"
},
"keywords": [
"doc",
Expand Down
74 changes: 74 additions & 0 deletions test/_helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// load ES6 modules in Node.js on the fly
require = require('esm')(module/*, options*/)

const {expect} = require('chai')

const {JSDOM} = require('jsdom')
const XMLHttpRequest = require('xhr2') // JSDOM doesn't support XMLHttpRequest
// TODO: try to fix tests when using `<div id="app"></div>` in body
const markup = `<!DOCTYPE html>
<html>
<head></head>
<body></body>
</html>`
// TODO: this may not work if tests are mutate the DOM, instead a new instance needs to be created
// for every test case but that will slow down the tests
const dom = new JSDOM(markup)

global.window = dom.window
global.document = dom.window.document
global.navigator = dom.window.navigator
global.location = dom.window.location
global.XMLHttpRequest = XMLHttpRequest

const {initMixin} = require('../src/core/init')
const {routerMixin} = require('../src/core//router')
const {renderMixin} = require('../src/core//render')
const {fetchMixin} = require('../src/core/fetch')
const {eventMixin} = require('../src/core//event')

// mimic src/core/index.js but for Node.js

function Docsify() {
this._init()
}

const proto = Docsify.prototype

initMixin(proto)
routerMixin(proto)
renderMixin(proto)
fetchMixin(proto)
eventMixin(proto)

function ready(callback) {
const state = document.readyState

if (state === 'complete' || state === 'interactive') {
return setTimeout(callback, 0)
}

document.addEventListener('DOMContentLoaded', callback)
}
let docsify = null
module.exports.init = function(callback) {
return new Promise((resolve, reject) => {
// return cached version / TODO: see above: this might not scale, new instance of JSDOM is reqiured
if (docsify != null) {
return resolve(docsify)
}
ready(_ => {
docsify = new Docsify()
return resolve(docsify)
})

})
}
module.exports.expectSameDom = function(actual, expected) {
const WHITESPACES_BETWEEN_TAGS = />(\s\s+)</g
function replacer(match, group1) {
return match.replace(group1, '')
}
expect(actual.replace(WHITESPACES_BETWEEN_TAGS, replacer).trim())
.equal(expected.replace(WHITESPACES_BETWEEN_TAGS, replacer).trim())
}
10 changes: 0 additions & 10 deletions test/_loader.js

This file was deleted.

Loading

0 comments on commit b535718

Please sign in to comment.