模拟静态方法es6类进行测试

时间:2018-07-16 05:59:00

标签: node.js unit-testing ecmascript-6 mocha sinon

我有一个库说'services.js'

class Service {
    static doSomething() {
         return Promise.resolve({});
    }
}

我还有另一个处理程序“ handler.js”

let Service = require('./Service');
exports.search = (req, res) => {
    Service.doSomething().then(result => {
        res.send(result);
    }).catch(err=>{
       res.status(500).send(err);
    });
}

我想测试我的处理程序。为此,我尝试在Service类中添加静态方法,例如:

let Service = require(path to services.js),
    Handler = require(path to handler.js),
     http_mocks = require('node-mocks-http'),;

describe("handler tests : ", () => {
    before(()=>{
        sinon.stub(Service, 'doSomething').callsFake(()=>{});
    })
    it('should succeed', (done) => {
        let response = buildResponse();
        let request  = http_mocks.createRequest({
            method: 'GET',
            url: '/search?q=2',
        });

        response.on('end', function() {
            let result = JSON.parse(response._getData());
             //Some validation
            done();
        });
        Handler.search(request, response);
        done();
    }) 
})

我收到TypeError:Service.doSomething不是一个函数。还有其他选择吗?我也尝试使用嘲讽。我在想什么吗

1 个答案:

答案 0 :(得分:0)

我在测试代码中发现了一个错误。 Service.doSomething()返回promise,但在测试文件中,我们使用callsFake将其存根,但它不返回promise

我们可以像这样使用resolves

before(() => {
 sinon.stub(Service, 'doSomething').resolves('asik');
});

注意:resolves自Sinon 4开始受到支持。