【问题标题】:Jasmine Testing Node.js Async modulesJasmine 测试 Node.js 异步模块
【发布时间】:2016-12-23 00:21:23
【问题描述】:

我正在尝试为我编写的一些代码编写单元测试,我遇到的问题是我希望在执行函数后调用我的模拟回调,但我的测试失败,因为它从未被调用。

describe("Asynchronous specs", function() {

    var mockNext;

    beforeEach(function() {
        mockNext = jasmine.createSpy('mockNext');
        var res;
       parallelRequests.APICall(testObject[0], null, mockNext);
    });

    it("callback spy should be called", function () {
        expect(mockNext).toHaveBeenCalled();
    });
});

被测试的函数很简单:

function APICall(options, res, next) {
        request(options, callback);
        function callback(error, response, body) {
        if (error) {
            if (error.code === 'ETIMEDOUT') {
                return logger.error('request timed out: ', error);
                 next(error);
            }
            logger.error('request failed: ', error);
            next(error);
        }
        next(null);
    }
}

我怀疑的问题是由于请求的异步性质,在 API 调用中执行模拟回调之前,茉莉花测试了预期。我尝试过使用其他人建议使用 done() 和标志的方法,但没有运气。希望能在这件事上得到一些指导。

【问题讨论】:

    标签: node.js unit-testing asynchronous jasmine requestjs


    【解决方案1】:

    您的beforeEach 代码是异步的。当您的beforeEach 逻辑完成时,您必须告诉 yasmin。您可以通过传递给每个测试的回调方法done 来解决这个问题。试试这个:

    describe("Asynchronous specs", function() {
    
        var mockNext;        
    
        beforeEach(function(done) {
    
            parallelRequests.APICall(testObject[0], null, function(){
                mockNext = jasmine.createSpy('mockNext');
                mockNext();
                done();
            });
        });
    
        it("callback spy should be called", function () {
            expect(mockNext).toHaveBeenCalled();
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2021-01-18
      • 2014-09-23
      • 1970-01-01
      相关资源
      最近更新 更多