在 js-app 运行 与 selenium 的集成测试中存根 http-request
Stub http-request in integration testing of js-app run with selenium
我使用 webdriverio
和 cucumberjs
在我的 Vue SPA 中进行集成测试。
加载后,我的应用程序确实请求从 api-server.
获取数据
在我的测试中,我想在没有 'touching endpoint' 的情况下从 api-server 修改/存根数据 returned(即拒绝请求和 return 我的 json).
Nock
、moxios
和其他人将无法工作,因为我的应用程序加载了 selenium。
我知道 json-server
、wiremock
,但我不想仅仅为了测试目的而修改我的源代码(url)。
理想情况下 selenium
/ webdriverio
应该拦截请求或将自定义代码添加到网页和 return 我的 json。
我有什么选择?
Selenium 是为 end-to-end 测试而设计的,它对 mock/stub 请求没有任何意义。
但是有一些方法可以做到:
- 在代理服务器上启动浏览器,代理服务器将拦截请求并模拟或重定向它们(参见 browsermob-proxy)。
- 启动带有 Web 扩展的浏览器以拦截和模拟请求。
您可以编写自己的 Web 扩展,或者如果您使用的是 Chrome/Chromium.
,则可以使用类似 Wiremock extension 的扩展
- 在页面中注入一些Javascript来挂钩
XMLHttpRequest
。
由于 Selenium 不提供在页面加载之前注入代码的方法,因此它仅适用于 mouse/keyboard 输入时触发的请求。
我使用 webdriverio
和 cucumberjs
在我的 Vue SPA 中进行集成测试。
加载后,我的应用程序确实请求从 api-server.
在我的测试中,我想在没有 'touching endpoint' 的情况下从 api-server 修改/存根数据 returned(即拒绝请求和 return 我的 json).
Nock
、moxios
和其他人将无法工作,因为我的应用程序加载了 selenium。
我知道 json-server
、wiremock
,但我不想仅仅为了测试目的而修改我的源代码(url)。
理想情况下 selenium
/ webdriverio
应该拦截请求或将自定义代码添加到网页和 return 我的 json。
我有什么选择?
Selenium 是为 end-to-end 测试而设计的,它对 mock/stub 请求没有任何意义。
但是有一些方法可以做到:
- 在代理服务器上启动浏览器,代理服务器将拦截请求并模拟或重定向它们(参见 browsermob-proxy)。
- 启动带有 Web 扩展的浏览器以拦截和模拟请求。 您可以编写自己的 Web 扩展,或者如果您使用的是 Chrome/Chromium. ,则可以使用类似 Wiremock extension 的扩展
- 在页面中注入一些Javascript来挂钩
XMLHttpRequest
。 由于 Selenium 不提供在页面加载之前注入代码的方法,因此它仅适用于 mouse/keyboard 输入时触发的请求。