无法阻止 jasmine-ajax 尝试解析 FormData 对象
Can't stop jasmine-ajax from trying to parse FormData object
我正在用 AJAX 创建一个 POST 并尝试测试发送的数据,但是当该测试运行时我收到错误 "paramString.split is not a function"。我已经寻找过关于此的其他帖子,但它们似乎都是关于让 FormData 与 AJAX 一起工作的,我没有遇到任何问题。数据发送了,但我无法围绕它编写成功的测试。
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
,但我不确定如何解决这个问题。
我不得不将测试更改为
expect(request.params).toEqual(data);
我正在用 AJAX 创建一个 POST 并尝试测试发送的数据,但是当该测试运行时我收到错误 "paramString.split is not a function"。我已经寻找过关于此的其他帖子,但它们似乎都是关于让 FormData 与 AJAX 一起工作的,我没有遇到任何问题。数据发送了,但我无法围绕它编写成功的测试。
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
,但我不确定如何解决这个问题。
我不得不将测试更改为
expect(request.params).toEqual(data);