首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在艾灸中指定response.request.responseURL

在艾灸中指定response.request.responseURL
EN

Stack Overflow用户
提问于 2017-07-18 15:29:14
回答 1查看 1.4K关注 0票数 0

我目前正在编写一些功能,要求在axios处理响应时设置response.request.responseURL值。然而,我似乎不能用艾滋来设定这个价值。下面是我的测试结果:

代码语言:javascript
复制
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();
        });
    });
});

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

代码语言:javascript
复制
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值(把它放在引号中,这样它就更容易读了):

日志:请求{解析:函数(a) {. },拒绝:函数(a) {. },配置:对象{适配器:函数mockAdapter(配置){. },transformRequest:对象{0:. },transformResponse:对象{0:.},超时: 0,xsrfCookieName:‘XSRF-令牌’,xsrfHeaderName:‘XSRF令牌’,maxContentLength:-1,validateStatus:函数validateStatus(状态){},headers: Object{Accept:.,my_csrf_token:.},方法:'get',url:'my_api_url/',data: un定义},headers: Object{Accept:'application/json,text/平原,/',my_csrf_token:'my_csrf_token'},url:‘my_api/’,timeout: 0,withCredentials: false,responseType:未定义}

这破坏了我的应用程序,因为应该始终定义responseURL。看起来它覆盖了我在艾灸中定义的请求。这不一定是坏事,因为我认为它需要这些东西才能正常工作。不过,如果我能为这个请求添加一些值,那就太好了。

那么,我如何在艾灸中为这个请求添加一个responseURL值呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 10:21:37

事实证明,设置responseURL是不可能的,因为我将它链接到respondWith()。在检查了艾莫斯源代码中的这个函数之后,我发现这里传递的值实际上只与返回的实际数据有关,而不是一个实际的响应对象。

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

以下是我最终追求的目标:

代码语言:javascript
复制
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();
        });
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45171181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档