使用jasmine-ajax模拟XMLHttpRequest给出了jasmine.ajax = undefined

问题描述 投票:0回答:1

我正在尝试使用jasmine-ajax在单元测试中模拟XMLHttpRequest。我使用Aurelia CLI生成我的应用程序,我使用Karma作为单元测试运行器。

对于单元测试,我尝试导入jasmine-ajax:

import * as jasmine from 'jasmine-ajax';

describe('when calling the API', () => {
  beforeEach(() => {
    jasmine.Ajax.install();
  });

  afterEach(() => {
    jasmine.Ajax.uninstall();
  });

  it('then it should get an answer back', () => {
    var doneFn = jasmine.createSpy("success");

    var xhr= new XMLHttpRequest();
    xhr.onreadystatechange = function(args) {
      if(this.readyState == this.DONE) {
        doneFn(this.responseText);
      }
    };

    xhr.open("GET", "https://someaddress.net/api/plans");
    xhr.send();

    expect(jasmine.Ajax.requests.mostRecent().url).toBe("https://someaddress.net/api/plans");
    expect(doneFn).not.toHaveBeenCalled();

    jasmine.Ajax.requests.mostRecent().respondWith({
      "status":200,
      "contentType": 'text/plain',
      "responseText": 'awesome response'
    });

    expect(doneFn).toHaveBeenCalledWith('awesome response');

  });
});

当用Karma运行测试时,我得到:

TypeError:jasmine_ajax__WEBPACK_IMPORTED_MODULE_0 __。jasmine未在test / karma-bundle.js行3146> eval(第7行)中定义

我发现我已经安装了jasmine-ajax的类型定义

npm i @ types / jasmine-ajax

然后我删除了jasmine-ajax的import语句。这导致了以下错误:

TypeError:jasmine.Ajax在test / karma-bundle.js行3134> eval(第3行)中未定义

那么我做错了什么?

我使用的是jasmine 3.3.9,jasmine-ajax 3.4.0,karma 4.0.1,typescript 2.9.2和webpack 4.4.25,

typescript webpack jasmine karma-jasmine jasmine-ajax
1个回答
0
投票

在安装karma-jasmine-ajax(https://github.com/IDCubed/karma-jasmine-ajax)并将'jasmine-ajax'添加到karma.conf.js中的frameworks数组后,它开始工作了。

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine-ajax', 'jasmine']
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.