Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应';s与enzyme和expect异步_Javascript_Reactjs_Mocha.js_Enzyme - Fatal编程技术网

Javascript 反应';s与enzyme和expect异步

Javascript 反应';s与enzyme和expect异步,javascript,reactjs,mocha.js,enzyme,Javascript,Reactjs,Mocha.js,Enzyme,我正在使用摩卡咖啡、酶和expect进行测试。我的组件中有一个函数运行另一个函数,该函数返回一个承诺,我不知道如何在第一个函数运行第二个函数之前测试它的行为,然后再测试该承诺(在.then之后获取错误) 第一功能: handleUpdateInput (value) { const { access, onUpdateInput } = this.props const v = !value || typeof value === 'string' ? value : acces

我正在使用摩卡咖啡、酶和expect进行测试。我的组件中有一个函数运行另一个函数,该函数返回一个承诺,我不知道如何在第一个函数运行第二个函数之前测试它的行为,然后再测试该承诺(在.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: [] })
        })
    }
  }
第二功能:

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的承诺(这是一个好主意),你可以用sinon来模拟你的承诺

例如,您可以尝试:

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'));