Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将单元测试写入";“请求”;带有sinon.stub的节点模块?_Javascript_Angularjs_Unit Testing_Sinon - Fatal编程技术网

Javascript 如何将单元测试写入";“请求”;带有sinon.stub的节点模块?

Javascript 如何将单元测试写入";“请求”;带有sinon.stub的节点模块?,javascript,angularjs,unit-testing,sinon,Javascript,Angularjs,Unit Testing,Sinon,我的代码中有此函数: let request = require("request"); let getDrillDownData = function (userId, query, callback) { query.id = userId; let urlQuery = buildUrlFromQuery(query); request.get({ url: urlQuery, json: true }, function (error, response, data)

我的代码中有此函数:

let request = require("request");
let getDrillDownData = function (userId, query, callback) {

query.id = userId;
let urlQuery = buildUrlFromQuery(query);

request.get({
    url: urlQuery,
    json: true
}, function (error, response, data) {
    if (!error && response.statusCode === 200) {
        return callback(null, calculateExtraData(data));
    } else if (error) {
        return callback(error, null);
    }
});


};
我想写一些单元测试来验证当用正确的参数调用函数时,它运行正常, 如果有错误,它会返回错误

我编写了以下单元测试代码:

describe.only('Server Service Unit Test', function(){
var sinon = require('sinon'),
    rewire = require('rewire');

var reportService;
var reportData = require('./reportData.json');

beforeEach(function(){
    reportService = rewire('../../services/reports.server.service');
});

describe('report methods', function(){
    var reportData;
    var query = { id: "test"};
    var userId = 'testuser';
    var getDrillDownData;

    var request;

    beforeEach(function(){
        getDrillDownData = reportService.__get__('getDrillDownData');
    });

    it ('should get drill down data by userId and query', function(done){
        var getCallback = sinon.stub();

        request = {
            get: sinon.stub().withArgs({
                url: query,
                json: true
            }, getCallback.withArgs("error", {statusCode: 200}, reportData))
        };

        reportService.__set__('request', request);

        getDrillDownData(userId, query, function(err, returnData){
            (err === null).should.eql(true);
            //(getCallback.withArgs(undefined, {statusCode: 200}, reportData).calledOnce).equal(true);
            done();
        });
});
});
但我一直在犯这样的错误:

错误:超过2000毫秒的超时时间。确保在此测试中调用了done()回调

有人能帮忙吗?
谢谢

我将存根
请求。get()
直接:

describe('report methods', function() {

  // Make `request.get()` a Sinon stub.
  beforeEach(function() {
    sinon.stub(request, 'get');
  });

  // Restore the original function.
  afterEach(function() {
    request.get.restore();
  });

  it ('should get drill down data by userId and query', function(done) {
    // See text.
    request.get.yields(null, { statusCode : 200 }, { foo : 'bar' });

    // Call your function.
    getDrillDownData('userId', {}, function(err, data) {
      ...your test cases here...
      done();
    });
  });
});
使用
request.get.yields()
(它调用Sinon可以在参数列表中找到的第一个函数参数;在本例中,是
(错误、响应、数据)
回调传递到函数中的
request.get()
)可以告诉Sinon使用哪些参数来调用回调

这样,您就可以检查
request.get()
的回调是否正确处理了所有参数

您也可以使用
.withArgs()
request.get.withArgs(…).yields(…)
),尽管您必须确保正确使用它;否则,如果确切参数不匹配,Sinon将调用原始的
request.get()
,而不是使用存根版本


相反,我更喜欢在调用后使用
stub.calledWith()
检查正确的参数。这与摩卡的集成也更好,因为您可以使用明确的断言。

谢谢!它帮助了我!