我有很多遵循以下格式的选择语句:
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)));
我假设它与我调用函数时有关,它返回不同的实例?但我会认为 deep equal 可以解决这个问题。不幸的是 - 我收到的错误消息没有提供任何帮助。
AssertionError: expected { Object (@@redux-saga/IO, SELECT) } to deeply equal { Object (@@redux-saga/IO, SELECT) }
有人试过上面的吗?或关于如何测试这个的建议?
谢谢!
答案 0 :(得分:0)
好吧,您每次都在创建一个新函数,因此您将无法在此处测试相等性 - 即使进行了深入的相等性检查。
替代建议:为什么不从效果中提取选择器函数并针对示例状态执行它,真正测试它的作用?