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

Pollyjs使用Timing.fixed(200)延迟请求在Ember测试环境为何失效?

解决Ember测试环境中Polly.js Timing.fixed(200)无效的问题

可能原因及解决方案

1. 确保Polly在测试中正确生效Timing配置

测试环境下初始化Polly时,需明确指定timing策略,同时确认模式配置不会覆盖延迟设置。示例代码:

import { setupPolly } from 'ember-polly';
import { Timing } from '@pollyjs/core';

module('Acceptance | 延迟验证测试', function(hooks) {
  setupPolly(hooks, {
    timing: Timing.fixed(200),
    mode: 'passthrough', // 避免录制/回放模式忽略timing配置
    recordIfMissing: false
  });

  test('请求延迟约200ms', async function(assert) {
    const start = Date.now();
    await fetch('/api/test-data');
    const duration = Date.now() - start;
    
    assert.ok(duration >= 180 && duration <= 220, `实际延迟${duration}ms,符合预期范围`);
  });
});

2. 禁用Ember测试环境的请求加速逻辑

Ember测试默认会启用请求加速以缩短测试时长,这会覆盖Polly的延迟设置。可在目标测试中临时禁用:

import { set } from '@ember/object';

module('Acceptance | 延迟验证测试', function(hooks) {
  hooks.beforeEach(function() {
    // 临时关闭测试环境的请求加速
    set(Ember, 'testing', false);
  });

  hooks.afterEach(function() {
    // 测试结束后恢复原配置
    set(Ember, 'testing', true);
  });

  // 此处编写Polly初始化及测试逻辑
});

注意:修改Ember.testing可能影响其他测试行为,建议仅在需要验证延迟的测试中使用。

3. 确认Polly适配器与Ember测试兼容

检查Polly的Fetch/XHR适配器是否在测试环境中正确注册,避免被Ember测试适配器拦截覆盖。可在tests/test-helper.js中全局配置:

import { Polly } from '@pollyjs/core';
import FetchAdapter from '@pollyjs/adapter-fetch';
import { Timing } from '@pollyjs/core';

Polly.register(FetchAdapter);
// 全局设置测试环境的默认延迟
Polly.defaults.timing = Timing.fixed(200);

4. 验证请求是否被Polly正确拦截

添加日志或断言确认请求经过Polly处理,排除初始化失败的可能:

test('请求被Polly拦截', async function(assert) {
  const polly = this.polly;
  polly.server.any().on('request', () => {
    assert.ok(true, '请求已被Polly捕获');
  });

  await fetch('/api/test-data');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:59:50