Created
November 26, 2016 23:32
-
-
Save cmawhorter/1792dc7ce43d693f10d27b9481c0a143 to your computer and use it in GitHub Desktop.
mithril v1 on the server. created for dev/testing and prod.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var MockBrowser = require('mock-browser').mocks.MockBrowser; | |
var jsdom = require('jsdom'); | |
function propagateToGlobal (window) { | |
for (var key in window) { | |
if (!window.hasOwnProperty(key)) continue | |
if (global[key]) { | |
if (process.env.JSDOM_VERBOSE) { | |
console.warn("[jsdom] Warning: skipping cleanup of global['" + key + "']") | |
} | |
continue | |
} | |
global[key] = window[key] | |
} | |
} | |
/* | |
* re-throws jsdom errors | |
*/ | |
function getError (errors) { | |
var data = errors[0].data | |
var err = data.error | |
err.message = err.message + ' [jsdom]' | |
// clean up stack trace | |
if (err.stack) { | |
err.stack = err.stack.split('\n') | |
.reduce(function (list, line) { | |
if (line.match(/node_modules.+(jsdom|mocha)/)) { | |
return list | |
} | |
line = line | |
.replace(/file:\/\/.*<script>/g, '<script>') | |
.replace(/:undefined:undefined/g, '') | |
list.push(line) | |
return list | |
}, []).join('\n') | |
} | |
return err | |
} | |
var ready = function(err) { | |
if (err) throw err; | |
require('./main.js'); | |
console.log(global.document.documentElement.outerHTML); | |
}; | |
jsdom.env({ | |
url: 'http://localhost:/', | |
globalize: true, | |
console: true, | |
useEach: false, | |
skipWindowCheck: false, | |
html: "<!doctype html><html><head><meta charset='utf-8'></head>" + | |
'<body></body></html>', | |
done: function(errors, window) { | |
var mock = new MockBrowser({ | |
window: window, | |
}); | |
global.window = mock.getWindow(); | |
global.document = mock.getDocument(); | |
// global.window.location = mock.getLocation(); | |
// global.window.navigator = mock.getNavigator(); | |
// global.window.history = mock.getHistory(); | |
// global.window.localStorage = mock.getLocalStorage(); | |
// global.window.sessionStorage = mock.getSessionStorage(); | |
if (errors) { | |
return ready(getError(errors)) | |
} | |
ready(null) | |
}, | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment