Вы не можете изменить window.location.href без перезагрузки страницы. Но если вы абсолютно хотите протестировать такого рода функции, это требует небольшой логической модификации.
Пример № 1:
Вы можете сделать это с двумя функциями, одна может быть простой функцией redirectTo, аналогичной вашей, а другая может быть той, которая имеет логику построения и 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:
Вы также можете написать нечто среднее:
// 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:
С другой стороны, если вы не хотите менять свою логику, и у вас есть простая функция, это не будет большой проблемой, если вы просто не протестируете ее ...