Javascript nodejs mocha-无法使用存根测试承诺
我试图用摩卡对承诺进行单元测试,但是,在测试承诺时,我遇到了两个问题 1) 我有Javascript nodejs mocha-无法使用存根测试承诺,javascript,node.js,mocha.js,es6-promise,sinon,Javascript,Node.js,Mocha.js,Es6 Promise,Sinon,我试图用摩卡对承诺进行单元测试,但是,在测试承诺时,我遇到了两个问题 1) 我有错误:超时超过2000ms。对于异步测试和挂钩,确保调用“done()”;如果返回承诺,请确保其得到解决。 2) 我的requestStub行为在第一次测试后未恢复或清除,这意味着第二次测试仍取决于第一次行为 handler.js "use strict"; var request = require('request'); class Handler { constructor() {}; g
错误:超时超过2000ms。对于异步测试和挂钩,确保调用“done()”;如果返回承诺,请确保其得到解决。
2) 我的requestStub
行为在第一次测试后未恢复或清除,这意味着第二次测试仍取决于第一次行为
handler.js
"use strict";
var request = require('request');
class Handler {
constructor() {};
getMarketData(symbol) {
return new Promise(function(resolve, reject) {
request("https://api.binance.com/api/v1/klines?symbol=" + symbol + "BTC&interval=1h",
function(err, res, body) {
if (err) {
return reject(err);
}
return resolve(JSON.parse(body));
});
});
}
}
module.exports = Handler;
"use strict";
var assert = require('assert');
var sinon = require('sinon');
var proxyquire = require('proxyquire').noCallThru();
describe("Handler", function() {
var handlerInstance;
var requestStub;
before(function() {
requestStub = sinon.stub();
var Handler = proxyquire("./handler.js", {"request": requestStub});
handlerInstance = new Handler();
});
afterEach(function() {
requestStub.restore;
});
describe("#getMarketData", function() {
it("test 1", function() {
var promise = handlerInstance.getMarketData("VTC");
requestStub.withArgs(sinon.match.any, sinon.match.any).yields(null, null, JSON.stringify({symbol: "VTC"}));
return promise.then(function(data) {
assert.equals(data.symbol, "VTC");
});
});
it("test 2", function() {
var promise = handlerInstance.getMarketData("STRAT");
requestStub.withArgs(sinon.match.any, sinon.match.any).yields(null, null, JSON.stringify({symbol: "STRAT"}));
return promise.then(function(data) {
assert.equal(data.symbol, "STRAT");
});
});
});
});
handler test.js
"use strict";
var request = require('request');
class Handler {
constructor() {};
getMarketData(symbol) {
return new Promise(function(resolve, reject) {
request("https://api.binance.com/api/v1/klines?symbol=" + symbol + "BTC&interval=1h",
function(err, res, body) {
if (err) {
return reject(err);
}
return resolve(JSON.parse(body));
});
});
}
}
module.exports = Handler;
"use strict";
var assert = require('assert');
var sinon = require('sinon');
var proxyquire = require('proxyquire').noCallThru();
describe("Handler", function() {
var handlerInstance;
var requestStub;
before(function() {
requestStub = sinon.stub();
var Handler = proxyquire("./handler.js", {"request": requestStub});
handlerInstance = new Handler();
});
afterEach(function() {
requestStub.restore;
});
describe("#getMarketData", function() {
it("test 1", function() {
var promise = handlerInstance.getMarketData("VTC");
requestStub.withArgs(sinon.match.any, sinon.match.any).yields(null, null, JSON.stringify({symbol: "VTC"}));
return promise.then(function(data) {
assert.equals(data.symbol, "VTC");
});
});
it("test 2", function() {
var promise = handlerInstance.getMarketData("STRAT");
requestStub.withArgs(sinon.match.any, sinon.match.any).yields(null, null, JSON.stringify({symbol: "STRAT"}));
return promise.then(function(data) {
assert.equal(data.symbol, "STRAT");
});
});
});
});
在调用
getMarketData()
之前,需要设置requestStub
的行为
当您在
getMarketData()
内部调用request()
时,它没有任何事情要做。因此,您的回调从未被调用,测试超时。我的坏消息:)