ページをリロードせずに window.location.href を変更することはできません。ただし、これらの種類の関数をどうしてもテストしたい場合は、ロジックを少し変更する必要があります。
例 #1:
これは 2 つの関数で行うことができます。1 つは自分の関数に似た単純な redirectTo 関数で、もう 1 つはビルドと URL のロジックを持つ関数です。このような:
// this function is so simple that you never need to unit test it
var redirectTo = function(url)
{
window.location.href = url;
}
// if this function has any logic worth testing you can do that without redirects
var buildUrl = function(someParameters)
{
// ....
// here be some logic...
// ....
return "http://www.google.com";
}
- redirectTo(url) 関数は非常にシンプルなので、テストしなくても機能することが常にわかります。
- buildUrl(someParameters) 関数には、URL を構築するためのロジックを含めることができるため、これをテストする必要があります。ページをリダイレクトせずにこれをテストできます。
例 #2:
これら 2 つのクロスを書くこともできます。
// don't test this function as it will redirect
var redirect = function()
{
window.location.href = buildUrl();
}
// if this function has any logic worth testing you can do that without redirects
var buildUrl = function()
{
// ....
// here be some logic...
// ....
return "http://www.google.com";
}
上記の例は、元の関数と同様の形式ですが、実際にテストできる URL 構築ロジック関数を持っています。
例ではありませんが、#3:
一方、ロジックを変更したくなく、このように単純な関数がある場合は、テストしなくても大したことではありません...