我想发布实际修改后的代码和解决方案。我必须单独get
Content-Type
。
const url = 'api/test';
const result = ApiRequestFactory.build(ApiRequestFactory.MusiQuestApiType, url);
const contentType = result.headers.get('Content-Type');
expect(result).not.toBeNull('The result is null.');
expect(result.url).toBe(urlJoin(config.MusiQuestApi.url, 'api/test'), 'The url is incorrect.');
expect(result.options).toBeFalsy('There is an options object and should not be.');
expect(result.credentials).toBe('omit', 'The credentials is not set to omit.');
expect(contentType).toBeTruthy('The Content-Type header is missing.');
expect(contentType).toBe('application/json', 'The Content-Type header is not set to application/json.');
expect(result.method).toBe('GET', 'The method is not set to GET.');
expect(result.mode).toBe('cors', 'The mode is not set to cors.');
在测试从defaultHeaders.values()
返回的对象时,即使我append
标题,我也会得到一个空对象。
我有一个构建Request
对象的类。您可以在下面看到它在构建对象时为header
添加默认Content-Type
。
export default class MusiQuestApiRequest {
static build(url, body, options) {
const defaultCredentials = 'omit';
let defaultHeaders = new Headers();
defaultHeaders.append('Content-Type', 'application/json');
const defaultMethod = 'GET';
const defaultMode = 'cors';
let init = {
credentials: options.credentials || defaultCredentials,
headers: options.headers || defaultHeaders,
method: options.method || defaultMethod,
mode: options.mode || defaultMode
};
if (body) {
init.method = options.method || 'POST';
init.body = JSON.stringify(body);
}
return new Request(url, init);
}
}
但是当我检查Content-Type
对象上的values
属性时,我得到了未定义,因为返回的values
对象是空的。
const url = 'api/test';
const result = ApiRequestFactory.build(ApiRequestFactory.MusiQuestApiType, url);
const headersResult = result.headers.values();
console.log('headersResult:', JSON.stringify(headersResult));
expect(result).not.toBeNull();
expect(result.url).toBe(urlJoin(config.MusiQuestApi.url, 'api/test'));
expect(result.options).toBeFalsy();
expect(result.credentials).toBe('omit');
expect(headersResult).toBeTruthy('headers missing');
expect(headersResult['Content-Type']).toBeTruthy('Content-Type missing');
expect(headersResult['Content-Type']).toBe('application/json');
expect(result.method).toBe('GET');
expect(result.mode).toBe('cors');
我在这里做错了什么?似乎很直接。
答案 0 :(得分:1)
result.headers
是一个Headers
对象,与普通的JavaScript对象略有不同。要从headers对象中检索值,可以使用get
函数。
例如:
myHeaders.get('foo')
或者,您可以使用values
返回Iterator
,这样您就可以使用for...of
循环来提取值。
您可以找到更多信息here。
希望这有帮助。