即使在 AVA 单元测试中选择退出,Mixpanel 也会返回一个响应对象而不是未定义的

Mixpanel returning a response object instead of undefined even when opted out in AVA Unit Test

我正在尝试为我的混合面板实施实施 AVA 单元测试。为此,我正在比较 mixpanel.track() 的结果,如果它 returns 任何东西,则轨道成功,否则,它应该是未定义的。

我想也许是因为它使用了不同的混合面板实例,所以我尝试创建一个命名实例并确保这一点,但它无济于事。我也在尝试相同的过程,但使用 Amplitude,它似乎工作正常(当我选择退出时,响应按预期失败)

我已经在我的组件中这样做了,如果 const test = mixpanel.track('event_name', {}) 成功,!!test === true 但如果我在 const test = mixpanel.track('event_name', {}) 之前执行 mixpanel.opt_out.tracking(),那么 !!test === 未定义。

预期行为(以及在我的组件中使用它时观察到的行为):

trackResponse === undefined

观察到的行为:

trackResponse === { event: 'asdf',
  properties:
   { '$browser': 'Safari',
     '$current_url': 'about:blank',
     '$browser_version': null,
     '$screen_height': 0,
     '$screen_width': 0,
     mp_lib: 'web',
     '$lib_version': '2.30.1',
     time: 1572898982.142,
     distinct_id: '[some_id]',
     '$device_id': '[some_id]',
     '$initial_referrer': '$direct',
     '$initial_referring_domain': '$direct',
     token: '[token]' } }

其中 [some_id] 和 [token] 是我删除的一些不同的值。

我不明白为什么在 AVA 测试中,我收到的响应通常是失败的 track() 导致未定义的响应。有人可以对此有所启发吗?

如果我需要提供任何其他信息,请告诉我。谢谢。

我已经解决了,以防其他人遇到这个问题。

我使用调试器进入 mixpanel.track() 调用并发现要查看用户是否选择退出,mixpanel 检查 localStorage 中的 属性 并进行比较看看它是不是 === to '0'。如果失败,它会假定用户没有选择退出并正常执行 track 调用。

我猜想在 AVA 测试期间,它无法访问这个 属性 并假设用户没有选择退出。为了修复它,在我对 mixpanel.init() 的调用中,我添加了 opt_out_tracking_persistence_type: 'cookie' 作为一个选项,以便我的 opt_out 调用被保存在测试期间可以访问 属性 的某个地方.