2017-04-06 29 views
0

我创建一个React应用程序并使用react-boilerplate作为我的基地项目。让我的头周围ReduxSagasreselect后,得到了我的第一个组件上运行,我想编写相应的单元测试。但不幸的是,我没能得到SELECT语句测试具有相应的选择正确测试:如何测试`选择(reselectSelector)`茉莉?

const selectDomain =() => (state) => state.get('myDomain'); 
const selectDomainMessage =() => createSelector(selectDomain(), (domain) => domain.get('message')); 

function* send() { 
    const message = yield select(selectDomainMessage()); 
    ... 
    yield put(sentAction(message); 
} 

describe('send Saga',() => { 
    const generator = send(); 

    it('should return select descriptor',() => { 
    let expectedDescriptor = select(selectDomainMessage()); 
    let returnedDescriptor = generator.next().value; 

    expect(returnedDescriptor).toEqual(expectedDescriptor); 
    }); 
}); 

从我的角度来看,这个测试应该工作,但它失败的(不是真的有帮助)错误信息:

Expected Object({@@ redux-saga/IO:true,SELECT:Object({selector:Function,args:[]})})等于Object({@@ redux- saga/IO:true,SELECT:Object({selector:Function,args:[]})})。

为了更容易地重现问题,我创建了一个带有所需环境的JSFiddle。也许有人可以告诉我我做错了什么。因为在预期和实际情况选择功能不是指称等同

回答

1

你的测试失败。

selectDomainMessage返回由createSelector返回的功能的功能;并且每次运行createSelector时,都会返回一个新函数。

为了您的测试通过,你可以捕捉的createSelector返回功能作为一个变量,并有selectDomainMessage回报:

​​

修改JSFiddle