【发布时间】:2019-04-04 13:47:56
【问题描述】:
我有一个小功能,用于检查用户名是否唯一。见下文:
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';
}
});
我想为它写一些测试。但是我得到了这个错误
Received value must be a function, but instead "undefined" was found
你能向我解释什么是错的吗?我的意思是,这是一个异步函数,当时它是未定义的,但不确定它要我做什么。
it('Accept the data if the passed userName is unique', async () => {
expect(await validateUsername('Username is unique')).not.toThrow();
});
【问题讨论】:
-
如果你使用
toThrow,你必须将一个函数传递给expect。 -
所以,如果我说
validateUsernamefn = jest.fn();,我说beforeEach(() => {validateUsername = validateUsernameFn},这行得通吗?我正在从索引文件中导入 validateusername。 -
你知道,我这样做了,它似乎正在工作:` it('如果传递的用户名是唯一的,则接受数据',async () => { expect(() => validateUsername('用户名是唯一的')).not.toThrow(); });`这对你来说正确吗?
-
是的,我就是这个意思。
-
实际上这种方法不起作用,因为调用
validateUsernamenever 会抛出一个Error,它会返回一个Promise,它可能会用Error拒绝,所以即使Error被抛出并且Promise被拒绝,该测试也将始终通过。相反,您需要测试返回的Promise...请参阅下面的答案
标签: reactjs unit-testing async-await jestjs enzyme