【问题标题】:How to mock XMLHTTPRequest in typescript for unit test如何在打字稿中模拟 XMLHTTPRequest 以进行单元测试
【发布时间】:2017-09-11 07:17:53
【问题描述】:

我的 src 文件中有这段代码,我想为此编写单元测试。我在 Angular 4 应用程序中使用 karma-webpack。请推荐

public static load(jsonFile: string): Promise<boolean> {
console.log('calling loadinstance');
return new Promise((resolve: any, reject: any) => {
  const xobj = new XMLHttpRequest();
  xobj.overrideMimeType('application/json');
  xobj.open('GET', jsonFile, true);
  xobj.onreadystatechange = () => {
    const readyOK = 4;
    const responseOK = 200;
    if (xobj.readyState === readyOK) {
      if (xobj.status === responseOK) {
        ConfigLoader.data = JSON.parse(xobj.responseText);
        resolve(true);
      }
      else {
        reject(`Could not load file '${jsonFile}': ${xobj.status}`);
      }
    }
  };
  xobj.send(null);
});

}

【问题讨论】:

    标签: javascript angular unit-testing webpack jasmine


    【解决方案1】:

    安静简单的使用 spyOn。

    it('Your Service', inject([YourService], (YourService: yourService) => {
      spyOn(yourService, 'load').and.returnValue(loadedJSON);
    

    【讨论】:

    • 我正在对负载方法本身进行单元测试。可以窥探我们正在测试的相同方法吗?
    • 如果您已经知道服务的结果,为什么还要测试服务本身?服务不是用来测试的,因为你测试的不是真正的服务,而是假的。所以回应是假的。你测试你的组件和 HTML。
    • @Swoox Service are not meant to be tested cause you not test the real service but a fake. 这是不正确的。服务当然可以有非平凡的逻辑,这是需要测试的。可能需要翻译方法参数或 API 响应、吞下或强制错误等等。
    • @MadanMohanKannojiya 监视它本身并没有错,但它不太可能有用。一般经验法则:您(通常)直接调用被测方法。当您需要观察无法直接访问的事物(例如帮助程序)时,您会使用间谍。您伪造或模拟依赖项。
    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2018-09-29
    • 1970-01-01
    • 2013-11-18
    • 2013-03-25
    • 1970-01-01
    • 2018-04-04
    • 2021-09-27
    相关资源
    最近更新 更多