【发布时间】:2016-02-19 17:39:57
【问题描述】:
我在为以下设置编写单元测试作为 jira.js 文件(在 node.js 模块中)时遇到问题:
var rest = require('restler'); // https://www.npmjs.com/package/restler
module.exports = function (conf) {
var exported = {};
exported.getIssue = function (issueId, done) {
...
rest.get(uri).on('complete', function(data, response) {
...
};
return exported;
};
现在,我想为我的 getIssue 函数编写单元测试。 “restler”是一个 REST 客户端,我通过它对 JIRA API 进行 REST 调用,以通过我的代码获取 JIRA 问题。
为了能够测试 createIssue(..),我希望能够在 Jasmine 单元测试中模拟“rest”变量。
我如何模拟这个方法?请给我一些指示,以便我可以继续。我曾尝试使用 rewire,但我失败了。
这是我目前所拥有的,但它不起作用(即 getIssue 方法原来是未定义的):
var rewire = require("rewire");
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
var cfg = require("../../../config.js").Configuration;
var jiraModule = rewire("../lib/jira")(cfg);
var sinon = require("sinon");
var should = require("should");
// https://github.com/danwrong/restler
var restMock = {
init : function () {
console.log('mock initiated'+JSON.stringify(this));
},
postJson : function (url, data, options) {
console.log('[restler] POST url='+url+', data= '+JSON.stringify(data)+
'options='+JSON.stringify(options));
emitter.once('name_of_event',function(data){
console.log('EVent received!'+data);
});
emitter.emit('name_of_event', "test");
emitter.emit('name_of_event');
emitter.emit('name_of_event');
},
get : function (url, options) {
console.log('[restler] GET url='+url+'options='+JSON.stringify(options));
},
del : function (url, options) {
console.log('[restler] DELETE url='+url+'options='+JSON.stringify(options));
},
putJson : function (url, data, options) {
console.log('[restler] PUT url='+url+', data= '+JSON.stringify(data)+
'options='+JSON.stringify(options));
}
};
var cfgMock = {
"test" : "testing"
};
jiraModule.__set__("rest", restMock);
jiraModule.__set__("cfg", cfgMock);
console.log('mod='+JSON.stringify(jiraModule.__get__("rest")));
describe("A suite", function() {
it("contains spec with an expectation", function() {
restMock.init();
restMock.postJson(null, null, null);
console.log(cfg.jira);
// the following method turns out to be undefined but when i console.log out the jiraModule, i see the entire code outputted from that file
jiraModule.getIssue("SRMAPP-130", function (err, result) {
console.log('data= '+JSON.stringify(result));
});
expect(true).toBe(true);
});
});
如果有人可以指导我如何模拟“其余”需要依赖项和单元测试,这种方法将非常有帮助。
另外,我应该如何模拟传递给 module.exports 的“conf”?
谢谢
【问题讨论】:
标签: javascript node.js mocking sinon jasmine-node