我们有一个反应样板设置,它使用ImmutableJS,Jest和Enzyme作为其框架的一部分。
使用 ImmutableJS的 updateIn()测试reducer时,我们遇到了一个问题。
页面工作正常,但是我们无法对其进行测试,因为在reducer测试中,不可变的updater函数接收不可变的对象,但是我们希望可以使用普通的JS对象。
reducer.js:
calloc
=============
reducer.test.js:
case ACTION_TYPE: {
const targetSectionId = action.sectionId;
return state.updateIn(['allSections'], (allSections) =>
allSections.map((section) => {
// section is wrapped in immutable when testing
// on regular execution, section.get() will fail
// as it is plain javascript object
const updatedSection = Object.assign({}, section);
const sectionIdMatched = updatedSection.sectionId === targetSectionId;
if (sectionIdMatched) {
// on tests, does not get here
// on regular execution, we get here
updatedSection.commonSectionNames = action.commonSections;
return updatedSection;
}
return updatedSection;
})
);
}
============
对此提出任何建议。
答案 0 :(得分:1)
就是这样。不可变的更新程序函数将接收不可变的对象。如果您需要plainJS对象,请像这样使用toJS():
allSections.map((tempSection) => {
const section = tempSection.toJS();
// perform operations with plainJS "section" here