2016-12-26 3 views
0

私のアプリケーションでは、ユーザーのナビゲーションを管理するために反応ルータを使用していますが、今はルートを変更する方法に固執しています。反応ルータベースのアプリケーションテスト

マイ<App />(簡体)です:

class AppUser extends Component { 
    render() { 
     return (
      <div className="layout"> 
       {this.props.children} 
      </div> 
     ); 
    } 
} 

class Initial extends Component { 
    render() { 
     return (
      <div className="initial" /> 
     ); 
    } 
} 

export default class App extends Component { 
    render() { 
     let masterPageBase = (props) => (
      <AppUser> 
       {props.children} 
      </AppUser> 
     ); 

     let notFound =() => (
      <div> 
       <h1>Not found!</h1> 
      </div> 
     ); 

     <Router history={browserHistory}> 
      <Route path="/" component={masterPageBase}> 
       <IndexRoute component={Initial} /> 
       <Route path="*" component={notFound} /> 
      </Route> 
     </Router> 
    } 
} 

そして、私のテストは次のとおりです。

describe('<App />',() => { 
    it('user',() => { 
     const wrapper = shallow(<App />); 

     // FIXME This fails 
     expect(wrapper.find('AppUser').length).toEqual(1); 
    }); 
}); 

それは既存の子になりますので、どのようにルートを変更することができます。あなたのテストで偽のブラウザの履歴を作成するために使用できるhistoryと呼ばれるモジュールがあり

答えて

2

これはどのようにすることができますあなたのテストで偽のルートです。あなたのテストでは

export default class App extends Component { 
    render() { 
     createRouter(browserHistory); 
    } 
} 

export function createRouter(history) { 
    let masterPageBase = (props) => (
     <AppUser> 
      {props.children} 
     </AppUser> 
    ); 

    let notFound =() => (
     <div> 
      <h1>Not found!</h1> 
     </div> 
    ); 

    return <Router history={history}> 
     <Route path="/" component={masterPageBase}> 
      <IndexRoute component={Initial} /> 
      <Route path="*" component={notFound} /> 
     </Route> 
    </Router> 
} 

、あなたはその後、偽の歴史を作成するために、履歴モジュールを使用することができます:

import { useRouterHistory } from "react-router"; 
import createMemoryHistory from "history/lib/createMemoryHistory"; 

function navigatingTo(path) { 
    return mount(createRouter(useRouterHistory(createMemoryHistory)(path))); 
} 

describe('Router',() => { 
    it('user',() => { 

     expect(navigatingTo("/").find('AppUser').length).toEqual(1); 
    }); 
}); 
それを適用するためには、あなたはこのように、それは使用しています歴史の中で、ルーターのパラメトリックを作成する必要があります

PS:これらのテストをnode.jsで実行する場合は、酵素のmount()が動作するためにjsdomを使用する必要があります。

+0

'useRouterHistory'は本当に必要ですか?これは 'createMemoryHistory'で直接動作するように見えます。 – Wanderson

+0

すべてのテストを実行した後、次のようなメッセージが表示されます。 '(node:21004)UnhandledPromiseRejectionWarning:未処理の約束拒否(拒否ID:2):TypeError:未定義の 'history'のプロパティを読み取れません。 – Wanderson

+0

正直言って私は午前これらのテストの専門家でもなくても... useRouterHistoryなしであなたのために働くなら、それはさらに良い:-) – Nicole

関連する問題