我试着运行这个jestJS单元测试,但是我得到了TypeError: Promise resolver undefined is not a function
。我做错了什么?
it('_onSubmit() should throw error if data is missing', (done) => {
const createUserMutation = () => new Promise()
const wrapper = shallow(<CreateAccount createUserMutation={createUserMutation} />)
wrapper.update().find(Form).simulate('submit', {
preventDefault: () => {}
})
createUserMutation.resolve().then(() => {
expect(console.error).toHaveBeenCalled()
done()
})
})
3条答案
按热度按时间e0bqpujr1#
new Promise()
正在尝试创建一个没有执行函数 * 的承诺。正确的用法是传入一个最多接受两个参数(resolve
和reject
)的函数,例如:关于MDN的更多信息:
Promise
constructor稍后,您似乎试图在promise示例上调用
resolve
。您也不能这样做(除非您没有使用标准promise)。您使用传递到执行程序的resolve
函数解析promise。(我试图为您修改代码,但需要太多上下文信息。)Promise
构造函数作为第一个参数传递给它的函数...8dtrkrch2#
如果您只想创建一个已解决的承诺,则使用
Promise.resolve()
,它将返回一个新的已解决的承诺。new Promise()
用于将非承诺(通常是异步的)代码转换为承诺代码,但看起来这里并不需要它。如果要使用它,必须向其中传递一个函数(正如Felix Kling和TJ Crowder已经指出的)。更多要点:
createUserMutation
定义为一个函数,所以在后面的几行中,当你使用它的时候,你需要用()
来 * call * 它,或者你可以选择让它不是一个函数,因为你在这里所做的似乎只是产生一个承诺。resolve()
方法,你可以在Promise.resolve()
产生的promise上调用.then()
。w8ntj3qf3#
在我的例子中,使用TypeScript之类的类型是一个问题。
这在JavaScript中是不可接受的,并且它会显示错误“Promise resolver is not a function”(Promise解析器不是一个函数)。