摩卡:使脚本function,将testing的对象

我怎样才能使我的function,我会testing的对象?

例如。 DOMParser对象。

testing:

import assert from 'assert'; import { DOMParser } from 'xmldom'; import { parseHtml } from './../src/parse-html.es6'; describe('HTML Parser', function () { it('Hello World', function () { parseHtml(); }); }); 

parseHtml():

 export function parseHtml(html) { const parser = new DOMParser(); return parser.parseFromString( `<html><head></head><body>${html}</body></html>`, 'text/html' ); } 

我会用mochanodejstesting。

您可以使用sinon来窥探或存根xmldom类:

 import assert from 'assert'; import * as sinon from 'sinon'; import { parseHtml } from './../src/parse-html.es6'; import { default as xmldom } from 'xmldom'; // Spy on the xmldom.DOMParser() constructor var spy = sinon.spy(xmldom, 'DOMParser'); describe('HTML Parser', function () { it('Hello World', function () { parseHtml(); // Check if the constructor was called once (and only once) assert(spy.calledOnce); }); }); 

在每次testing之前,确保重置间谍( spy.reset() )。

我已经解决了这个问题,通过将parseHtml函数重新构造成一个类并传递给我testing的DOMParser()对象。

testing/ parse.js

 import chai from 'chai'; import xmldom from 'xmldom'; import Parse from './../src/parse.es6'; const { assert } = chai; const { DOMParser } = xmldom; let parse; describe('Parser', function () { beforeEach(function () { parse = new Parse(DOMParser); }); it('should parse HTML', function () { let html = parse.html(''); assert.ok(html); }); }); 

parse.es6

 export default class Parse { constructor (domparser) { // This hack is needed for testing. To emulte the browsers DOMParser. this.domparser = !domparser ? new DOMParser() : new domparser(); } html(body) { return this.domparser.parseFromString( `<html><head></head><body>${body}</body></html>`, 'text/html' ); } } 

也得到了更好的扩展parsing器的好处。 🙂