javascript - React 与 enzyme 和 expect 的异步

标签 javascript reactjs mocha.js enzyme

我正在使用 mocha、enzyme 和 expect 进行测试。我的组件中有一个函数运行另一个返回 promise 的函数,我不知道如何在运行第二个函数之前测试第一个函数的行为,然后再测试 promise (.then 之后出现错误)

第一个函数:

handleUpdateInput (value) {
    const { access, onUpdateInput } = this.props
    const v = !value || typeof value === 'string' ? value : access(value)
    if (onUpdateInput) {
      onUpdateInput(value ? v : '')
    }

    this.setState({
      searchText: value
    })

    this.dataSourceUpdate(value)
}

第二个功能:

dataSourceUpdate (value) {
    const { promise, access } = this.props

    if (value === '') {
      this.autoCompleteData = []
      this.setState({ dataSource: [] })
    } else {
      promise(value)
        .then(res => {
          this.autoCompleteData = res.data
          this.setState({
            dataSource: this.autoCompleteData.map(access).slice(0, getMenuItemNumber(this.refs.customAutoComplete))
          })
        })
        .catch(() => {
          this.autoCompleteData = []
          this.setState({ dataSource: [] })
        })
    }
  }

如果能给我一份使用这些工具测试异步函数的好教程,我将不胜感激 :)

最佳答案

由于您是从 props 获得 promise 的(这是个好主意),您可以使用 sinon 模拟您的 promise 。

例如,您可以尝试:

var Promise = require('bluebird'); // you can use any Promise module here

var deferred = Promise.defer();
stub = sinon.stub(deferred, 'resolve').returns(deferred.promise);

deferred.resolve({res: { data: 'YOUR_DATA' }});
// or
deferred.reject(new Error('fake error'));

关于javascript - React 与 enzyme 和 expect 的异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40926942/

相关文章:

javascript - 对投资组合进行排序后,div 高度可以平滑地动画到新的高度

javascript - 在 WebStorm 中通过断言的测试失败

javascript - 无法读取未定义的属性 'status' - Mocha Chai

javascript - 多次添加数据时使用选定的项目

javascript - webpack 加载器始终在编译中包含 node_modules

javascript - 为什么 simplecart.js 不适合我?

javascript - 将 React 组件与另一个组件包装在同一文件中

javascript - 多级静态路由架构React Router v4

reactjs - 在非 SPA 中使用 React-router

javascript - 如何对依赖于外部库 "<script src="http ://stripe[. ..] 的 API 进行单元测试