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
相关产品推荐
相关产品推荐

