2017-02-09 75 views
3

我使用elasticsearch並想編寫一個單元測試下面的代碼:如何模擬Node.js中的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); 
    }); 
} 

我所熟悉的摩卡和興農,但是我不知道一個好的模式來使用存根\模擬client.create在這種情況下。

任何人都可以提出一種方法,我可以使用?

+1

作爲參考:我結束了以下這樣的事情:https://slmyers.github.io/elasticsearch/javascript/testing/2 017/04/04 /嘲諷-elasticsearch-calls.html。可能與您的方法有所不同,具體取決於實施。 – blo0p3r

回答

4

一種可能的選擇是使用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" 

這種假客戶端可以在通過注射測試被傳遞到模塊經由proxyquire

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