【发布时间】:2014-02-27 18:43:53
【问题描述】:
假设我有以下方法:
function sendUserDataToServer(userData) {
// Do some configuration stuff
$.ajax('SomeEndpoint', userData);
}
在为这个函数编写单元测试时,我可以采用以下两种方式之一:
- 围绕
$.ajax创建一个间谍并检查它是否使用预期的参数调用。不会发送实际的 XHR 请求。 - 使用 SinonJs 等库拦截 ajax 请求并检查 XHR 对象以确保其配置正确。
为什么我会选择选项 1:它将 $.ajax 的功能与我的代码分开。如果$.ajax 因 jQuery 中的错误而中断,它不会在我的单元测试结果中产生假阴性。
为什么我可能会选择选项 2:如果我决定使用除 jQuery 之外的另一个库来发送 XHR,我不必更改我的单元测试来检查不同的方法。但是,如果该库中存在错误,我的单元测试将失败,我不一定会立即知道它是库而不是我的实际代码。
哪种方法是正确的?
【问题讨论】: