You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jest模拟navigator.userAgentData.platform?

在Jest中模拟navigator.userAgentData.platform的方案

Jest里可以直接修改全局navigator对象来模拟平台属性,完全满足你针对macOS/Windows的正负测试需求,具体实现如下:

基础模拟方式

在测试前的钩子或单个测试用例里,直接覆盖navigator.userAgentData的platform属性即可:

// 全局钩子,确保每个测试前都能重置模拟(可选)
beforeEach(() => {
  global.navigator = {
    ...global.navigator,
    userAgentData: {
      platform: 'macOS' // 默认模拟macOS环境
    }
  };
});

正负测试示例

正测试(macOS平台)

test('macOS环境下不执行else分支逻辑', () => {
  global.navigator.userAgentData.platform = 'macOS';
  render(<MyComponent />);
  // 这里写你的断言:比如验证else里的操作没发生(比如某个DOM元素不存在、函数未被调用等)
});

负测试(非macOS平台)

test('Windows环境下执行else分支逻辑', () => {
  global.navigator.userAgentData.platform = 'Windows';
  render(<MyComponent />);
  // 这里写你的断言:比如验证else里的操作已执行(比如某个DOM元素存在、函数被调用等)
});

处理边界场景

如果要模拟navigator.userAgentData不存在的旧浏览器环境,直接删除该属性即可:

test('userAgentData不存在时执行else分支逻辑', () => {
  delete global.navigator.userAgentData;
  render(<MyComponent />);
  // 编写对应断言
});

避免测试污染

为了防止不同测试用例的模拟互相干扰,建议在afterEach钩子中恢复原始navigator状态:

afterEach(() => {
  delete global.navigator.userAgentData;
  // 或者直接恢复成初始的window.navigator
  global.navigator = window.navigator;
});

内容的提问来源于stack exchange,提问作者CHINCHUDO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:43:17