bounty将在3天后过期。回答此问题可获得+300的声望奖励。J. Hesters正在寻找来自知名来源的答案:在用Playwright进行API测试时,有没有办法拦截服务器正在执行的请求,以便您可以在测试中访问它?
我使用npm run dev
运行服务器。
我正在用Playwright的API测试来测试服务器。
我有一个简单的GET
路由,它总是返回一个405不允许。它还记录API路由被调用。为了这个StackOverflow例子,我用fetch
替换了这个日志到一个保持器API。
export const loader = async () => {
await fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => console.log(json));
return notAllowed();
};
在我的API测试中,我希望截取对占位符API的fetch
请求,并验证它是否被调用,而不是实际调用它。
当你用Playwright编写一个普通的浏览器测试时,你可以使用page.route
:
page.route('*', route => {
console.log('url', route.request().url());
route.continue();
});
但是,由于这是一个API测试,并且不在页面中运行,因此这不会起作用。
如何截取API请求以对其进行Assert?
我尝试使用以下内容创建新上下文:
test('my test', async ({ playwright }) => {
const context = await playwright.request.context();
});
但context
对象实际上是request
对象,因此不能运行request.on
。我还尝试使用默认fixture中的context
参数,但也不起作用。
1条答案
按热度按时间bvjveswy1#
编写API测试:
Playwright Test附带了内置的请求fixture,它尊重配置选项,可以像下面这样用来发送和Assert一些请求。