javascript - 如何在 Node.js 中模拟 elasticsearch 实例?

标签 javascript node.js unit-testing tdd sinon

我正在使用 elasticsearch 并想为以下代码编写单元测试:

import * as elasticsearch from "elasticsearch";
import config from "../config";

const client = new elasticsearch.Client({
  host: config.elasticsearch.host,
  log: "trace"
});

export function index(data) {
    return new Promise((resolve, reject) => {
        client.create({
            index: "myindex",
            type: "mytype",
            id: booking.urn,
            body: data
        }).then(resolve, reject);
    });
}

我熟悉 mocha 和 sinon,但是我不知道在这种情况下使用 stub\mock client.create 的好的模式。

任何人都可以建议我可以使用的方法吗?

最佳答案

一个可能的选择是使用 proxyquire + sinon 组合

Sinon 将伪造 Client:

const FakeClient = sinon.stub();
FakeClient.prototype.create = sinon.stub().returns("your data");
var fakeClient = new FakeClient();
console.log(fakeClient.create()); // -> "your data"

这样的假客户端可以通过proxyquire注入(inject)被测试模块:

import proxyquire from 'proxyquire';
const index = proxyquire('./your/index/module', {
  'elasticsearch': { Client: FakeClient }
});

关于javascript - 如何在 Node.js 中模拟 elasticsearch 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135596/

相关文章:

javascript - For 循环变量索引

javascript - 如何在node.js中获取网络静态信息,例如Rx/Tx字节(/数据包)

reactjs - 测试素材-ui按钮文字

jquery - 如何在 ASP.NET MVC 中对客户端 jQuery/JavaScript 代码进行单元测试?

javascript - 跨域 AJAX 请求在 IE10 上不起作用

javascript - 如何使用 javascript 自动将 '/' 添加到 mmyyyy 格式的日期中?

javascript - 仪表太鼓 : given selector list/count encountered itens

javascript - QuickSort 算法因 stackoverflow 错误而失败

node.js - 在CF中调试nodejs应用程序

python-2.7 - python - Flask test_client() 没有使用 pytest 的 request.authorization