gpt4 book ai didi

node.js - 模拟静态方法 es6 类进行测试

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:16 25 4
gpt4 key购买 nike

我有一个名为“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 类中 stub 静态方法,例如:

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 不是函数。还有其他选择吗?我也尝试过使用 mock 。我错过了什么吗

最佳答案

我在测试代码中发现了一个错误。 Service.doSomething() 返回 promise 但在测试文件中,我们使用 callsFake 对其进行 stub ,并且它不返回 promise

我们可以使用 resolves 来实现此目的,如

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

注意:resolves 自 Sinon 4 起就得到支持。

关于node.js - 模拟静态方法 es6 类进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51355411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com