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

如何在Next.js中为Playwright模拟服务端API响应

解决Node.js服务端API模拟问题

你当前使用的page.route是Playwright专门用来拦截浏览器客户端发起的请求的方法,所以只能模拟前端页面调用的API。如果要模拟Node.js服务端自身发起的API请求(比如服务端代码里用axios/fetch调用外部服务),需要用专门针对Node.js进程的拦截工具,比如Nock。

下面分场景给出具体解决方案:

场景1:拦截服务端内部发起的HTTP请求

Nock库可以拦截Node.js进程中所有向外发起的HTTP请求,完美适配服务端API模拟需求:

  1. 先安装Nock:
npm install nock --save-dev
  1. 编写拦截代码(放在服务启动前或测试用例开头):
import nock from 'nock';

// 拦截指向https://customisation域名的GET /steps请求
nock('https://customisation')
  .get('/steps')
  .reply(200, { data: 'mocked response' });

只要服务端代码里发起的请求匹配这个规则,就会返回你预设的模拟数据,不管是在路由处理、中间件还是其他服务逻辑里调用的。

场景2:服务端渲染(SSR)场景下的API模拟

如果你的Node.js应用是SSR模式,服务端渲染时会发起API请求,同样可以用Nock提前设置拦截规则,确保渲染过程中的请求被拦截:

// 在启动SSR服务前设置Nock规则
nock('https://customisation')
  .persist() // 持久化规则,拦截所有匹配的请求
  .get('/steps')
  .reply(200, { data: 'mocked SSR response' });

// 然后启动你的SSR服务
await startServer();

场景3:直接测试Node.js服务端API

如果你的需求是测试自己的Node.js服务端API(而非前端页面),更推荐用Supertest结合Nock:

import request from 'supertest';
import nock from 'nock';
import app from './path-to-your-express-app';

test('测试服务端API依赖外部接口的场景', async () => {
  // 模拟服务端依赖的外部API
  nock('https://customisation')
    .get('/steps')
    .reply(200, { data: 'mocked response' });

  // 调用自己的服务端API
  const res = await request(app).get('/your-server-api-endpoint');
  
  // 断言返回结果符合预期
  expect(res.statusCode).toBe(200);
  expect(res.body).toEqual(/* 你的预期数据结构 */);
});

注意事项

  • Nock的拦截规则是顺序执行的,确保在服务端发起请求前就设置好规则。
  • 如果需要拦截POST、PUT等其他请求方法,Nock也支持对应的方法(.post()、.put()等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:55:11