在 moxios 中指定 response.request.responseURL



我目前正在尝试编写一些功能,这些功能需要在 axios 处理响应时设置response.request.responseURL值。但是,我似乎无法使用 moxios 设置此值。这是我的测试的样子:

it('resets list selection if input contents were replaced', (done) => {
component.currently_selected_list_value = 10;
component.last_called_url = 'henkiehoutman';
let input = domElt.querySelector('input');
ReactTestUtils.Simulate.change(input);
moxios.wait(() => {
let request = moxios.requests.mostRecent();
request.respondWith({
status: 200,
response: [{
customer_info_customers: ['', '', '', '', ''],
domain_info_customers: {},
}],
request: {responseURL: 'banaan'}
}).then(() => {
// The contents were replaced, so it's best to forget whatever our selection was.
expect(component.currently_selected_list_value).toEqual(-1);
done();
});
});
});

这是我的实际应用程序的样子:

onChange (event) {
return axios.get(
this.props.ApiUrl + encodeURIComponent(event.target.value)
).then(
(response) => {
let response_url = response.request.responseURL;  // This is the value I want to set manually.
if(this.shouldHandleResponse(response_url)){
this.last_called_url = response_url;
let data = response.data;
this.setState({results: data, dropdown: data.length > 0});
if ( this.currently_selected_list_value > max_index) {
this.currently_selected_list_value = max_index;
}
}
}
);
},

但是,当我记录此值时,它只是说undefined.这就是实际response.request值(将其放在引号中,以便更具可读性(:

LOG: Request{resolve: function (a( { ... }, reject: function (a( { ... }, config: Object{adapter: function mockAdapter(config( { ... }, transformRequest: Object{0: ...}, transformResponse: Object{0: ...}, timeout: 0, xsrfCookieName: 'XSRF-TOKEN',

xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, validateStatus: function validateStatus(status( { ... }, headers: Object{Accept: ..., X-CSRFToken: ...}, method: 'get', url: 'my_api_url/', data: undefined}, headers: Object{Accept: 'application/json, text/plain,/', X-CSRFToken: 'my_csrf_token'}, url: 'my_api_url/', timeout: 0, withCredentials: false, responseType: undefined}

这会破坏我的应用程序,因为应始终定义responseURL。看起来它正在覆盖我在 moxios 中定义的请求。这不一定是一件坏事,因为我认为它需要这些东西才能正常运行。但是,如果我能在此请求中添加一些值,那就太好了。

所以;如何在 moxios 中向此请求添加responseURL值?

事实证明,由于我将其链接到respondWith()的方式,因此无法设置responseURL。在 moxios 源代码中检查此函数后,我发现您在此处传入的值实际上只与返回的实际数据有关,而不是实际的响应对象。

我还看到respondWith()函数返回一个Promise对象,这是非常合乎逻辑的。我想我不应该在Promise上设置任何东西,而是在实际请求上设置任何东西。因此,我将返回的Promise分配给promise变量,并取消了测试.then()部分的链接。之后我设置了请求的responseURL。然后我再次打电话给promise.then()断言我的测试已经通过。

这是我最终追求的:

it('resets list selection if input contents were replaced', (done) => {
component.currently_selected_list_value = 10;
component.last_called_url = 'henkiehoutman';
let input = domElt.querySelector('input');
ReactTestUtils.Simulate.change(input);
moxios.wait(() => {
let request = moxios.requests.mostRecent();
let promise = request.respondWith({
status: 200,
response: [{
customer_info_customers: ['', '', '', '', ''],
domain_info_customers: {},
}],
});
request.responseURL = 'banaan';
promise.then(() => {
// The contents were replaced, so it's best to forget whatever our selection was.
expect(component.currently_selected_list_value).toEqual(-1);
done();
});
});
});

最新更新