Dim*_*fst 1 unit-testing async-await reactjs jestjs enzyme
我有一个小功能,用于检查用户名是否唯一。见下文:
export const validateUsername = value =>
listUsers({ once: true }).then(({ data }) => {
if (Array.isArray(data) && data.find(userData => userData.username === value)) {
// eslint-disable-next-line no-throw-literal
throw 'Username already exists';
}
});
Run Code Online (Sandbox Code Playgroud)
我想为它写一些测试。但我收到这个错误
Received value must be a function, but instead "undefined" was found
Run Code Online (Sandbox Code Playgroud)
你能向我解释什么是错的。我的意思是,这是一个异步函数,当时它是未定义的,但不确定它想让我做什么。
it('Accept the data if the passed userName is unique', async () => {
expect(await validateUsername('Username is unique')).not.toThrow();
});
Run Code Online (Sandbox Code Playgroud)
validateUsername
返回一个Promise
可以拒绝Error
...
...所以测试返回的Promise
任一.resolves
或.rejects
预期:
const listUsers = async() => Promise.resolve({data: [{ username: 'existing username' }]});
export const validateUsername = value =>
listUsers({ once: true }).then(({ data }) => {
if (Array.isArray(data) && data.find(userData => userData.username === value)) {
// eslint-disable-next-line no-throw-literal
throw new Error('Username already exists'); // <= throw an Error instead of just a string
}
});
it('Accept the data if the passed userName is unique', async () => {
await expect(validateUsername('Username is unique')).resolves.not.toThrow(); // Success!
});
it('throws error if username already exists', async () => {
await expect(validateUsername('existing username')).rejects.toThrow('Username already exists'); // Success!
});
Run Code Online (Sandbox Code Playgroud)
(请注意,您需要抛出一个Error
而不是一个字符串来检查其消息toThrow
)
归档时间: |
|
查看次数: |
3088 次 |
最近记录: |