React与酶的异步并期待

时间:2016-12-02 07:29:00

标签: javascript reactjs mocha enzyme

我正在使用摩卡,酶和期待我的测试。我在我的组件中有一个函数,它运行另一个返回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: [] })
        })
    }
  }

我还希望通过这些工具向我发送一个测试异步函数的好教程:)

1 个答案:

答案 0 :(得分:0)

既然你从道具那里得到了承诺(这是一个很好的想法),你可以用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'));