javascript - 使对象在要测试的函数中可用

标签 javascript node.js dependency-injection mocha.js

如何使在测试模块中创建的对象在要测试的函数中可用?

例如,测试代码从xmldom模块中获取一个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();
    });
});

那个 DOMParser 类应该是被测试函数中使用的类:

parseHtml():

export function parseHtml(html) {
    const parser = new DOMParser();

    return parser.parseFromString(
        `<html><head></head><body>${html}</body></html>`,
        'text/html'
    );
}

我如何获得 DOMParser 类,以便 parseHtml 将使用它?

我将使用 mochanodejs 进行测试。

最佳答案

你可以使用 sinon监视或 stub 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 (spy.reset())。

关于javascript - 使对象在要测试的函数中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875451/

相关文章:

javascript - Babel-node 在编译时不会忽略指定的文件/文件夹

javascript - 非阻塞函数返回后的 Node.js 回调处理

javascript - Angular - 循环依赖注入(inject)器尝试将 $modal 注入(inject)异常处理程序装饰器

javascript - CSS 在缩略图悬停时显示元素

javascript - Socket.io 有两个 Node.js 服务器?

javascript - setDate 不返回该月的最后一天 Javascript

javascript - 合并两个对象(优化)

node.js - socket.io - xhr-polling 中不触发断开连接事件

java - Guice @Provides 方法与提供者类

WCF 和 Unity - 依赖注入(inject)