【问题标题】:TypeError: Right-hand side of 'instanceof' is not callableTypeError:'instanceof' 的右侧不可调用
【发布时间】:2019-09-17 19:44:16
【问题描述】:

我想测试我的函数,它检查我的变量是否是我正在使用的类型的实例并执行某些操作。 我做了这样的检查,它按预期工作。

myCheckingFunction = () => {
 if (target instanceof H.map.Marker) {
 ...
 }
}

但是当我想通过在我的测试中调用函数来测试这段代码时(我正在用 jest 进行测试),那么它会抛出 typeError。

为什么会发生这种情况,我该如何通过?

编辑: 经过进一步调查后,我意识到,仅在测试中调用该函数并假设一切正常,这不会起作用。它与我在myCheckingFunction 中的 instanceof 'H.map.Marker' 中检查的类型相关联。

此时我的项目设置不是最好的,但我必须解决这个问题。这就是我所拥有的:

class MockEventTarget {}
(global as any).H = {
  map: {
    Marker: MockEventTarget,
  },
};

// this is how I call my test for myCheckingFunction
testMyCheckingFunction({target: new MockEventTarget()});

由于我不能只在我的测试中导入 H.map.Marker,我正在创建一个虚拟类。然后创建一个全局变量,我告诉我的测试设置假设 H.map.Marker 是一个类。

使用此设置,我不再从上面收到错误消息,因为我的测试现在实际上可以调用一个虚拟构造函数。

【问题讨论】:

  • 究竟是什么错误?
  • TypeError: 'instanceof' 的右侧不可调用
  • 什么是 H.map.Marker?
  • 它是对象的一种类型。
  • 请在您的问题中提供它的定义以及您如何导入它(如果您这样做)。您的问题缺乏足够的信息,现在任何人都无法为您提供帮助。

标签: reactjs typescript jestjs


【解决方案1】:

试试下面的代码应该可以工作:

myCheckingFunction = (e) => {
 if (e.target instanceof H.map.Marker) {
 ...
 }
}

【讨论】:

  • 还是一样。但是为什么这仍然有效呢?它关于我的测试失败的打字。不是因为功能 - 功能运行良好,只是测试没有。
猜你喜欢
  • 2017-09-16
  • 2017-01-18
  • 2018-01-11
  • 2020-04-05
  • 2017-08-28
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多