высмеивание условного вызова функции window.open с помощью jest - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь написать тест, чтобы убедиться, что когда и когда я передаю действительный URL-адрес аргументу функции, она запускает windows.open(args), чтобы открыть ее. затем, чтобы убедиться, что я сосредоточен на нем.

Проверка правильности ссылки:

export function isValidURL(url: string): boolean {
  try {
    new URL(url)
    return true
  } catch (e) {
    console.warn(`Invalid URL: ${url}`)
    return false
  }
}

Открыть ссылку:

export function openURL(url: string): void {
  if (isValidURL(url)) {
    const exTab = window.open(url, "_blank")
    if (exTab) exTab.focus()
  }
}

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

Мой вопрос:

describe("Test tools.openURL()", () => {
  test("it should open link if valid.", () => {
    const { open } = window
    delete window.open
    window.open = jest.fn()
    openURL("htts//url2.de9v")
    expect(window.open).not.toHaveBeenCalled()
    openURL("https://www.url1.dev")
    expect(window.open).toHaveBeenCalled()
    window.open = open
    // test focus here
  })
})

С этим кодом у меня естьудалось проверить open, теперь мне просто нужно проверить focus.

1 Ответ

0 голосов
/ 01 октября 2019

'open' только для чтения. Вместо jest.spyOn(window, "open") Попробуйте:

Object.defineProperty(window, 'open', { value: <your mock> });

вместо <your mock> найдите фиктивный объект или объект, который должен быть возвращен.

...