摩卡:使脚本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' ); }
我会用mocha
和nodejs
testing。
您可以使用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器的好处。 🙂