0

我正在使用 AJAX 进行 POST 并尝试测试发送的数据,但是当测试运行时我收到错误“paramString.split 不是函数”。我已经寻找过有关此的其他帖子,但它们似乎都是关于让 FormData 与 AJAX 一起使用,我没有遇到任何问题。数据发送,但我无法围绕它编写成功的测试。

阿贾克斯:

upload: (file, progressCallback) => {
  let data = new FormData();
  data.append('image', file);

  return $.ajax({
    xhr: function() {
      let xhr = new window.XMLHttpRequest();

      xhr.upload.addEventListener('progress', progressCallback);
      return xhr;
    },
    method: 'POST',
    url: apiUrl(),
    cache: false,
    processData: false,
    contentType: false,
    data: data
  });
}

测试:

describe('my test', () => {

  beforeEach(function() {
    jasmine.Ajax.install()
  });

  afterEach(function() {
    jasmine.Ajax.uninstall();
  });

  it('sends a POST request to the right endpoint with data', function() {
    const image = { 
        size: 10000,
        type: 'image/jpeg'
    };

    let data = new FormData();
      data.append('image', image);

    myService.upload(image); // POST happens here

    const request = jasmine.Ajax.requests.mostRecent();

    expect(request.method).toBe('POST');              // passes
    expect(request.url).toBe('/dashapi/dam-assets/'); // passes
    expect(request.data()).toEqual(data);             // error
  });

错误

TypeError: paramString.split is not a function

错误发生在这一行: https ://github.com/jasmine/jasmine-ajax/blob/master/src/paramParser.js#L18 。我在那里放了一个断点,paramString此时实际上是一个 FormData 对象。我假设模拟请求jasmine.Ajax.install会覆盖processData: false我在原始请求中的内容,但我不知道如何解决这个问题。

4

1 回答 1

0

我不得不将测试更改为

expect(request.params).toEqual(data);
于 2016-08-19T17:38:50.970 回答