Fix mocha tests in TypeScript

`mock-require` does not work with TypeScript, as the compiled JS expects a sub-object: `import { config } from Config` compiles to `const config_1 = require("./config")`, but the config object is now in `config_1.config`, *not* in `config_1` directly.

Therefore `mock-require` was replaced with `ts-mock-imports`, which also simplifies the code a bit.

Signed-off-by: David Mehren <dmehren1@gmail.com>
This commit is contained in:
David Mehren 2020-05-09 13:50:53 +02:00
parent 3b8c85cc9b
commit ac030760ba
No known key found for this signature in database
GPG key ID: 6017AF117F9756CB
3 changed files with 17 additions and 32 deletions

View file

@ -5,7 +5,8 @@ import assert from 'assert'
import crypto from 'crypto'
import fs from 'fs'
import path from 'path'
import mock from 'mock-require'
import * as configModule from '../lib/config';
import { ImportMock } from 'ts-mock-imports';
describe('Content security policies', function () {
let defaultConfig, csp
@ -31,22 +32,11 @@ describe('Content security policies', function () {
}
})
afterEach(function () {
mock.stop('../lib/config')
csp = mock.reRequire('../lib/csp')
})
after(function () {
mock.stopAll()
csp = mock.reRequire('../lib/csp')
})
// beginnging Tests
it('Disable CDN', function () {
const testconfig = defaultConfig
testconfig.useCDN = false
mock('../lib/config', testconfig)
csp = mock.reRequire('../lib/csp')
ImportMock.mockOther(configModule, 'config', testconfig);
assert(!csp.computeDirectives().scriptSrc.includes('https://cdnjs.cloudflare.com'))
assert(!csp.computeDirectives().scriptSrc.includes('https://cdn.mathjax.org'))
@ -59,8 +49,7 @@ describe('Content security policies', function () {
it('Disable Google Analytics', function () {
const testconfig = defaultConfig
testconfig.csp.addGoogleAnalytics = false
mock('../lib/config', testconfig)
csp = mock.reRequire('../lib/csp')
ImportMock.mockOther(configModule, 'config', testconfig);
assert(!csp.computeDirectives().scriptSrc.includes('https://www.google-analytics.com'))
})
@ -68,8 +57,7 @@ describe('Content security policies', function () {
it('Disable Disqus', function () {
const testconfig = defaultConfig
testconfig.csp.addDisqus = false
mock('../lib/config', testconfig)
csp = mock.reRequire('../lib/csp')
ImportMock.mockOther(configModule, 'config', testconfig);
assert(!csp.computeDirectives().scriptSrc.includes('https://disqus.com'))
assert(!csp.computeDirectives().scriptSrc.includes('https://*.disqus.com'))
@ -81,16 +69,14 @@ describe('Content security policies', function () {
it('Set ReportURI', function () {
const testconfig = defaultConfig
testconfig.csp.reportURI = 'https://example.com/reportURI'
mock('../lib/config', testconfig)
csp = mock.reRequire('../lib/csp')
ImportMock.mockOther(configModule, 'config', testconfig);
assert.strictEqual(csp.computeDirectives().reportUri, 'https://example.com/reportURI')
})
it('Set own directives', function () {
const testconfig = defaultConfig
mock('../lib/config', defaultConfig)
csp = mock.reRequire('../lib/csp')
ImportMock.mockOther(configModule, 'config', testconfig);
const unextendedCSP = csp.computeDirectives()
testconfig.csp.directives = {
defaultSrc: ['https://default.example.com'],
@ -103,8 +89,7 @@ describe('Content security policies', function () {
childSrc: ['https://child.example.com'],
connectSrc: ['https://connect.example.com']
}
mock('../lib/config', testconfig)
csp = mock.reRequire('../lib/csp')
ImportMock.mockOther(configModule, 'config', testconfig);
const variations = ['default', 'script', 'img', 'style', 'font', 'object', 'media', 'child', 'connect']
@ -118,7 +103,7 @@ describe('Content security policies', function () {
*/
it('Unchanged hash for reveal.js speaker notes plugin', function () {
const hash = crypto.createHash('sha1')
hash.update(fs.readFileSync(path.resolve(__dirname, '../node_modules/reveal.js/plugin/notes/notes.html'), 'utf8'), 'utf8')
hash.update(fs.readFileSync(path.join(process.cwd(), '/node_modules/reveal.js/plugin/notes/notes.html'), 'utf8'), 'utf8')
assert.strictEqual(hash.digest('hex'), 'd5d872ae49b5db27f638b152e6e528837204d380')
})
})