2017-06-12 58 views
0

所以我用酶呈現了一堆上下文的組成部分:語境缺失功能

const surveysByType = "test"; 
const wrapper = shallow(
    <Dashboard routeParams={{}} />, 
    { 
     context: { 
      assetUrl:() => { 
       return "https://www.example.com/broken.gif" 
      }, 
      executeAction:() => {}, 
      getStore: (whatever) => { 
       return { 
        getState:() => { 
         return { 
          _surveysByType: surveysByType, 
         }; 
        }, 
        on:() => { 
         return {}; 
        } 
       } 
      }, 
      router: { 
       createHref:() => {}, 
       go:() => {}, 
       goBack:() => {}, 
       goForward:() => {}, 
       isActive:() => {}, 
       push:() => {}, 
       replace:() => {}, 
       setRouteLeaveHook:() => {}, 
      }, 
      siteUrl:() => { 
       return "https://www.example.com" 
      }, 
     } 
    } 
); 

然而,當我開始嘗試用說下,我發現只有一個單一的功能是存在的,即

console.log(wrapper.context()) 

產生

{ getStore: [Function: getStore] } 

,而不是所有的功能。事實上,如果我嘗試做

expect(wrapper.context().assetUrl()) 

我得到一個錯誤:

TypeError: wrapper.context(...).assetUrl is not a function

,而這工作得很好:

expect(wrapper.context().getStore().getState())  

回答

0

您可能需要提供更多代碼來幫助診斷此問題。例如,上面引用的console.log語句在哪裏?

做一些假設,您應該檢查Dashboard.contextTypes包含的內容。如果它只包含getStore:PropTypes.function,這可以解釋爲什麼你只能在淺層渲染中看到它。如果包裝儀表板的組件(例如包裝器)使用其他屬性,則調用console.log的代碼可能無法獲取傳遞給shallow()的整個上下文,因爲據我瞭解,僅React提供在組件的contextTypes靜態方法中定義的上下文對象。