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

Dar*_*ryn 7 javascript tdd unit-testing node.js 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

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

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

lub*_*nac 8

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

诗乃将伪造Client:

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

这样的假客户端可以通过注入传递到被测模块中proxyquire:

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