2017-07-18 5 views
0

現在、Axiosがレスポンスを処理するときにresponse.request.responseURLの値を設定する必要がある機能を記述しようとしています。しかし、私はこの値をモクシーズで設定することはできません。レスキューをレスポンスに指定する

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:リクエスト{解決:機能(A){...}、拒否:機能(A {0} ...、{0:...}、timeout:0、...、{0} xsrfCookieName: 'XSRF-TOKEN'、xsrfHeaderName: 'X-XSRF-TOKEN'、maxContentLength:-1、validateStatus:function validateStatus(status){...}、ヘッダー:オブジェクト{Accept:...、X-CSRFToken: X-CSRFToken: 'my_csrf_token':メソッド: 'get'、url: 'my_api_url /'、data:undefined}、ヘッダー:オブジェクト{Accept: 'application/json、text/plain、/' }、url: 'my_api_url /'、タイムアウト:0、withCredentials:false、responseType:undefined}

responseURLは常に定義する必要があるため、これは私のアプリケーションを壊します。それは私がmoxiosで定義した要求を上書きしているようです。これは必ずしも悪いことではありません。なぜなら、これらのことが適切に機能することが必要だと思うからです。しかし、このリクエストにいくつかの値を追加できたらうれしいです。

So;このリクエストにresponseURL値を追加するにはどうすればよいですか?

答えて

0

respondWith()にチェーンされているため、responseURLを設定することはできません。モキシコのソースコードでこの関数をチェックしたところ、ここで渡す値は、実際のレスポンスオブジェクトではなく、実際のデータが返されるだけです。

respondWith()関数がPromiseオブジェクトを返すこともわかりました。これはかなり論理的です。私はPromiseで何も設定すべきではないと思っていましたが、実際の要求に応じました。そこで返されたPromisepromise変数に割り当て、テストの.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(); 
     }); 
    }); 
}); 
関連する問題