Заглушка Sinon.JS для window.location.search

Я пытаюсь протестировать простую функцию, которая вызывает window.location.search. Я пытаюсь понять, как заглушить этот вызов, чтобы я мог вернуть URL-адрес по своему выбору.

функция:

getParameterByName: (name) =>    
  name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]")
  regexS = "[\\?&]" + name + "=([^&#]*)"
  regex = new RegExp(regexS)    
  results = regex.exec(window.location.search) //Stub call to window.location.search
  if(results == null)
    return ""
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "))

Тестовый пример:

describe "Data tests", () ->
  it "Should parse parameter from url", () ->        
    data = new Data()

    console.log("search string: " + window.location.search) //prints "search string:"
    window.location.search = "myUrl"
    console.log("search string: " + window.location.search) //prints "search string:"
    console.log(data.getParameterByName('varName'))

    expect(true).toBe(true)

Моя первоначальная попытка состояла в том, чтобы вернуть значение непосредственно так:

sinon.stub(window.location.search).returns("myUrl")

Это, конечно, не работает. Я не думаю, что правильно указываю заглушку, но это показывает мое намерение.

Буду очень признателен за любые идеи о том, как решить эту проблему.

5
задан tanguy_k 30 August 2019 в 12:12
поделиться