gpt4 book ai didi

node.js - Sinon 单元测试 'catch' 语句

转载 作者:搜寻专家 更新时间:2023-10-31 22:38:13 25 4
gpt4 key购买 nike

我有一个简单的函数,例如;

module.exports = {
fetchUser:function(myUserId) {
return new Promise((resolve, reject) => {
this.getUser(myUserId)
.then(user => {
// do logic // then return user

return user;
})
.then(resolve)
.catch(err => {
// whoops there has been an error

let error = { error: 'My Error' };

reject(error);
});
});
}
};

我想对 resolvereject 结果进行单元测试。

一个简单的 chai 测试是;

var expect = require('chai').expect;
var user = require('./user');

describe('User module', function() {
it('test fetchUser', function() {
let _user = user.fetchUser('abc123');

return _user
.then(user => {
expect(data).to.be.an('object');
});
});

使用 sinon 或其他库,我如何让 fetchUser 函数抛出 reject 错误?

最佳答案

对于 MochaChaiSinon,它可以通过 stub 方法 getUser 来实现。

const User = require("./fetchUserModule");

describe('User module', () => {
beforeEach(() => User.getUser = sinon.stub());

afterEach(() => User.getUser.reset());

it('returns user if `getUser` returns data', () => {
const user = {name: 'John'};
User.getUser.withArgs("abc123").returns(Promise.resolve(user));

return User.fetchUser("abc123").then(result => {
expect(result).to.equal(user)
}).catch(error => {
expect(error).to.be.undefined;
})
});

it('throws error if `getUser` is rejected', () => {
User.getUser.withArgs("abc123").returns(Promise.reject());

return User.fetchUser("abc123").then(result => {
expect(result).to.be.undefined;
}).catch(err => {
expect(err).to.eql({error: 'My Error'})
})
});
});

关于node.js - Sinon 单元测试 'catch' 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40881686/

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