カスタムモジュールtokens.jsは、npmリクエストモジュールでリクエストを行う機能を持っています。 入手トークン()機能をカバーするためにをテストリクエストモジュールを再配線でモックする方法は?
'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);
});
});
私はユニットを書きたいのですが、私は要求モジュールをあざけるといくつかのトラブルを持っている:それはこのようになります。
私はこの試みた:
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))?そして私はこれにどのように再配線を使うべきですか?
私はnode.jsのDIアプローチについては考えていませんでした。私はこの方法で試してみるよ、ありがとう。 – t1maccapp
https://stackoverflow.com/questions/46952843/mock-module-which-does-not-exist/46954753私は 'meteor/meteor'の場所を模擬したいのですが、一般的には' meteor from 'という流星をインポートします/ meteor'''は 'meteor test'ではなく' npm run mocha-tests'でテストを開始してから存在しません。残念ながら、多くのコードは 'Meteor'環境に依存しています。 – Gobliins