嘲笑条件window.open函数调用

问题描述 投票:0回答:1

我正在尝试编写一个测试,以确保何时以及何时将有效的URL arg传递给函数,它会运行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()
  }
}

我以为我应该模拟一些功能,也许要假冒它的对数,然后等待它的呼叫次数或类似的次数。但是我对玩笑和测试并不陌生,我对如何做到这一点感到很困惑。

我的issay:

describe("Test tools.openURL()", () => {
  test("it should open link if valid.", () => {
    const urlError: string = "htts//url2.de9v"
    const urlSuccess: string = "https://www.url1.dev"

    const dontOpenMocking = jest.spyOn(window, "open").mockImplementation()
    const openMocking = jest.spyOn(window, "open").mockImplementation()

    expect(dontOpenMocking).toHaveBeenCalledTimes(0)
    expect(openMocking).toHaveBeenCalled()
  })
})
javascript typescript testing mocking jest
1个回答
0
投票

'open'是只读属性。尝试:

Object.defineProperty(window, 'open', { value: <your mock> });
© www.soinside.com 2019 - 2024. All rights reserved.