2016-03-21 6 views
0

私は現在、私のreact/reduxアプリケーションのフロントエンドテストにmochaを使用しています。フロントエンドのテスト中にブラウザー関連の変数を無視する+ reactxのアプリケーション

機能にブラウザ関連の変数がある場合は、いつでもテストが失敗するようです。

例えば、私の機能の一つは次のようになります。

export const loginUserSuccess = (token, user) => { 
    localStorage.setItem('token', token); // browser-related variable here 
    return { 
     type: LOGIN_USER_SUCCESS, 
     payload: { 
      token: token, 
      user: user 
     } 
    } 
} 

localStorageの私の使用に注意してください。この変数はテスト中は明らかに利用できませんので、loginUserSuccessアクションを引き起こすようなテストは決して通過しません。正直言って、私はlocalStorageロジックをまったくテストする必要はありません - 私はちょうど正しいことを返すアクションが欲しいです。私はこのような何かを行う場合でも、しかし:

if (localStorage) localStorage.setItem('token', token);

私はまだのlocalStorageが未定義であるというエラーを取得します。テストモジュールに特定の変数を無視させるにはどうすればよいですか?

もう1つの例は、アクションがグローバルwindowを呼び出す場合です。 API呼び出しを行うとき、私はどこにその要求を送信する表示するには、ウィンドウに自分の行動を見ている:

export const createUserInAuthStore = (username, password) => { 

    let url = `${window.__BASE_URL__}/auth/user/` // look at the window here 
    let data = { username, password } 

    return request 
     .post(url) 
     .type('form') 
     .send(data) 
     .end() 
     .then((response) => { 
     return { 
      token: response.body.token, 
      username 
     } 
     }) 
     .catch((error) => Promise.reject(error)) 
} 

明らかモカは窓が3行目で定義されていないことをしかし、私はこれまで、その行を修正しても文句:

let baseurl = window ? window.__BASE_URL__ : 'api.dockerhost'

mochaはエラーをスローし続けます。

TL; DR:テスト時にブラウザ関連の変数を無視または置き換える方法はありますか?

+0

あなたはwindow.localStorageをいくつかのモックバージョンで置き換えることができます。ちょうどローカル変数を設定します(または必要がない場合は破棄します)。 – bryanph

答えて

0

mochaでは、グローバルに使用可能なすべての変数の接頭辞はglobalです。 (

global.window = { 
    __BASE_URL__: "/bla/whatever" 
} 

そして、他のテストに影響を与えることを避けるために、その後、再びそれらを削除することを忘れないでください:だからあなたのlocalStorageを模擬するために、あなたはこれが

global.localStorage = { 
    setItem: function() {} 
} 

とあなたの窓のための

、あなたがこれを行うことができます行うことができます私は通常、 afterEach()関数でそれを行います)。

関連する問題