我有一個自定義模塊tokens.js具有通過npm請求模塊發出請求的功能。它看起來像這樣:如何使用rewire模擬請求模塊?
'use strict';
let request = require('request');
module.exports.getToken = function(code, cb) {
let url = 'some_url';
request(url, function (err, response, body) {
if (err) {
return cb(err);
} else if (response.statusCode !== 200) {
return cb('err');
}
parseGetResponse(body, function (err, token) {
if (err) {
return cb(err);
}
return cb(null, token);
});
});
我想寫單元測試覆蓋爲gettoken()函數,但我有一些麻煩與嘲諷請求模塊。
我嘗試這樣做:
let mocha = require('mocha');
let rewire = require('rewire');
let should = require('should');
let requestMock = {
request: function (url, cb) {
// return cb(); etc
}
}
let tokens = rewire('services/tokens.js');
tokens.__set__('request', requestMock);
但這種方法是行不通的:
TypeError: request is not a function
at Object.module.exports.getToken (services/tokens.js)
實際上,它引出了另一個問題: 如何請求模塊可以不工作直接調用導出函數(request.request(url,cb))?我應該如何使用rewire?
我甚至沒有想到node.js中的DI方法。我會嘗試這種方式,謝謝。 – t1maccapp
你可以檢查https://stackoverflow.com/questions/46952843/mock-module-which-does-not-exist/46954753我想嘲笑'流星/流星'的位置或一般'從流星導入流星' /流星'這是不存在的,因爲我開始我的測試'npm直接運行摩卡測試'而不是'流星測試'。不幸的是,很多代碼依賴於'流星'環境。 – Gobliins