我有很多select语句,它们遵循以下格式:
const selector = (identifier) => (state) => state.getIn(['ui', identifier, 'object']);
上面的选择器和普通选择器之间的区别在于,我传递了一个填充getIn
调用的标识符。所以你不做yield select(selector)
,而是做yield select(selector(identifier))
这很好用,但我似乎无法对其进行单元测试
通常你可以只得到预期的效果select(selector)
,并断言与之相等,例如
expect(generator.next().value).to.deep.equal(select(selector));
但当我试图传递一个标识符时,这是不起作用的:
expect(generator.next().value).to.deep.equal(select(selector(identifier)));
我认为这与我调用函数时返回不同实例有关?但我本以为深度平等可以解决这个问题。不幸的是,我收到的错误消息没有提供任何帮助。
AssertionError: expected { Object (@@redux-saga/IO, SELECT) } to deeply equal { Object (@@redux-saga/IO, SELECT) }
有人试过上面的吗?或者关于我如何测试这个的建议?
谢谢!
好吧,您每次都要创建一个新函数,所以您将无法在这里测试相等性,即使进行深度相等性检查也是如此。
另一个建议:为什么不从效果中提取选择器函数,并针对示例状态执行它,真正测试它的作用?