Ane*_*leh 2 javascript mocha.js jsdom chai
我正在使用Chai和Mocha对我的辅助函数进行测试.我使用JSDOM来包含atob和btoa.这是我的setup.js文件:
const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>');
const { window } = jsdom;
global.window = window;
global.document = window.document
global.btoa = window.btoa;
global.atob = window.atob;Run Code Online (Sandbox Code Playgroud)
当我尝试运行我的测试时,我收到此错误:
TypeError: Right-hand side of 'instanceof' is not an object.
我的测试功能:
describe('helpers', () => {
const testObject = { id: 1 };
const encodedObject = base64EncodeObject(testObject);
const decodedObject = base64DecodeObject(encodedObject);
describe('base64DecodeObject()', () => {
it('decoded object should match original object', () => {
assert.deepEqual(decodedObject, testObject);
});
});
});Run Code Online (Sandbox Code Playgroud)
目标功能:
const base64DecodeObject = (base64String) => {
let object = atob(base64String);
object = JSON.parse(object);
return object;
}Run Code Online (Sandbox Code Playgroud)
你的问题是由于你只是在模仿Node中的DOM环境的过程中.您设置了一些变量并停在那里,因此您最终得到的东西既不是库存节点环境,也不是DOM环境.
chai用于deep-eql执行深度比较,并deep-eql使用命名的包type-detect来完成它的一些工作.type-detect执行一个测试,指示它在DOM环境中运行,并最终尝试执行此操作:
if (obj instanceof globalObject.HTMLElement && obj.tagName === 'BLOCKQUOTE') {
Run Code Online (Sandbox Code Playgroud)
因为你没有复制HTMLElement从window到global,那么它失败,你的错误.你可以通过添加:
global.HTMLElement = window.HTMLElement;
Run Code Online (Sandbox Code Playgroud)