私は現在、私の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:テスト時にブラウザ関連の変数を無視または置き換える方法はありますか?
あなたはwindow.localStorageをいくつかのモックバージョンで置き換えることができます。ちょうどローカル変数を設定します(または必要がない場合は破棄します)。 – bryanph