摩卡:使脚本函数中的对象可用于测试
如何在我的函数中使对象可用,我将测试?摩卡:使脚本函数中的对象可用于测试
例如。 DOMParser对象。
测试:
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
测试。
我已经解决了这个问题,通过将parseHtml函数重构为一个类并在我的测试中传递了DOMParser()对象。
测试/ 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'
);
}
}
也得到了更好地延长解析器的好处。 :)
你可以使用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);
});
});
每次测试之前,请务必复位间谍(spy.reset()
)。
是的,你是对的。在这种情况下,它会起作用。但是我需要'''parse.html();'''的结果。我需要一个真正的解析的HTML。 – danbruegge
@danbruegge我不清楚你到底想要测试什么。 – robertklep
在其他测试中,我有一个html代码片段必须放入此html,并且应该被解析。 – danbruegge
这里有什么问题?你导入它? –
问题是,DOMParser在parseHtml()中不可用。我怎样才能使它在这个功能?在parseHtml()中,我使用浏览器中的DOMParser。在测试函数中,我从xmldom中导入DOMParser,来“模拟?”它。 – danbruegge