如何用 jasmine 测试 `select(reselectSelector)`?
How to test a `select(reselectSelector)` with jasmine?
我正在创建一个 React application and use react-boilerplate as my base project. After getting my head around Redux, Sagas and reselect 并获得了我的第一个组件 运行,我想编写相应的单元测试。但不幸的是,我无法通过相应的 select 或正确测试来获得 select 语句的测试:
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: [ ] }) }) to equal Object({ @@redux-saga/IO: true, SELECT: Object({ selector: Function, args: [ ] }) }).
为了更容易地重现问题,我创建了一个具有所需环境的 JSFiddle。也许有人可以告诉我我做错了什么。
您的测试失败,因为预期和实际情况下的选择器函数在引用上不等效。
函数 selectDomainMessage
return 是 return 由 createSelector
编辑的函数;每次 createSelector
运行时,它都会 return 一个新函数。
为了让你的测试通过,你可以捕获 createSelector
的 return 函数作为一个变量,并让 selectDomainMessage
return 那:
const selector = createSelector(selectDomain(), (domain) => domain.get('message'))
const selectDomainMessage = () => selector;
已修改JSFiddle
我正在创建一个 React application and use react-boilerplate as my base project. After getting my head around Redux, Sagas and reselect 并获得了我的第一个组件 运行,我想编写相应的单元测试。但不幸的是,我无法通过相应的 select 或正确测试来获得 select 语句的测试:
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: [ ] }) }) to equal Object({ @@redux-saga/IO: true, SELECT: Object({ selector: Function, args: [ ] }) }).
为了更容易地重现问题,我创建了一个具有所需环境的 JSFiddle。也许有人可以告诉我我做错了什么。
您的测试失败,因为预期和实际情况下的选择器函数在引用上不等效。
函数 selectDomainMessage
return 是 return 由 createSelector
编辑的函数;每次 createSelector
运行时,它都会 return 一个新函数。
为了让你的测试通过,你可以捕获 createSelector
的 return 函数作为一个变量,并让 selectDomainMessage
return 那:
const selector = createSelector(selectDomain(), (domain) => domain.get('message'))
const selectDomainMessage = () => selector;
已修改JSFiddle