【发布时间】:2017-11-14 21:50:06
【问题描述】:
我正在尝试想出一种方法来测试使用辅助函数的组件方法,如下所示:
handleUserClick = e => {
this.setState({ somePieceOfState: e.target.value }, () => {
someHelperFn(e.target.value);
});
}
这是一个粗略的例子,但基本上现在我对整个组件都有代码覆盖(Jest),除了调用辅助函数的行。我看不出将帮助函数单独导入测试文件有什么帮助,所以我很难过。
编辑:我问这是一个广泛的问题,即如何测试使用辅助函数或非组件方法的组件,而不是专门针对上面那个^示例。
根据要求,这里是被调用函数的详细介绍:
const someHelperFn = params => {
const BASE_URL = '/api/public/log-client-event';
const queryString = generateQueryString(params);
const logClientRequest = new XMLHttpRequest();
logClientRequest.open('GET', `${BASE_URL}${queryString}`);
logClientRequest.send();
return logClientRequest;
};
它没有返回值。 Jest 似乎在抱怨,因为它存在于 React 组件中,并且无法实际测试它(据我所知)。
【问题讨论】:
-
听起来你的测试可能会在回调运行之前退出。您最初可以尝试在测试代码中添加延迟,看看是否是这种情况。
-
@DanPrince 我认为他在问如何测试辅助函数,而不仅仅是回调。
-
为什么它是一个辅助函数很重要?只需测试它的返回值是否符合您的期望。用这个最小的代码示例有点难以知道你想要什么因为它是一个辅助函数,你也可以在另一个专门的辅助测试中单独测试它。
-
@MartinDawson 你是对的。现在我正在考虑用 istanbul 排除该函数调用,因为 Jest 在引擎盖下使用了 istanbul。问题是伊斯坦布尔在选择性地关闭代码的某些部分方面有点糟糕。
-
@MartinDawson 辅助函数(在我的例子中)没有返回值,只是发出跟踪用户交互的请求。
标签: javascript reactjs enzyme