2016-12-02 20 views
5

我正在使用摩卡,酶和期待我的测试。我在组件中有一个函数,它运行另一个函数,它返回一个promise,我不知道如何在运行第二个函数之前测试第一个函数的行为,然后测试promise(在.then之后获取错误)React与酶的异步,并期待

1功能:

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) 
} 

第2个功能:

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: [] }) 
     }) 
    } 
    } 

我还希望给我测试异步功能的一个很好的教程使用这些工具:)

回答

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