Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[Feature]: Add Server Side mocking #30766

Open
Romarionijim opened this issue May 13, 2024 · 17 comments
Open

[Feature]: Add Server Side mocking #30766

Romarionijim opened this issue May 13, 2024 · 17 comments

Comments

@Romarionijim
Copy link
Contributor

Romarionijim commented May 13, 2024

🚀 Feature Request

What I would like to see and experience is for playwright to allow pure server side mocking in addition to the existing client side api mocking via routes - similar to Nock and Jest.
With one command we can intercept the request of the backend api and then re-use the intercepted request in our tests to assert the mocked response data.
We mock the endpoint once and re use across different tests in the same file.

Example

import {serverSideMock as mock} from '@playwright/test'

const scope = mock('https://pokeapi.co/api/v2')
 .get('/pokemon')
 .reply(200,{
    count:3000,
    next:"https://pokeapi.co/api/v2/pokemon?offset=20&limit=20",
    previous:"Random",
    results: [
        { name: 'fake1', url: 'https://pokeapi.co/api/v2/pokemon/1/' },
        { name: 'fake2', url: 'https://pokeapi.co/api/v2/pokemon/2/' },
        ],
    })

test('mock pokemon API response and assert count is 3000',{tag:['@POKE']}, async({request}) => {
  const response = await request.get(url);
  const resObj = await response.json();
  expect(resObj.count).toBe(3000)
})

test('mock should fail due to count mismatch',{tag:['@POKE']}, async({request}) => {
  const response = await request.get(url);
  const resObj = await response.json();
  expect(resObj.count).toBe(1500)
})


Motivation

Motivation is to complement Playwright and make it a real full stack test automation and not just UI - it already supports api testing and mocking, but mocking for the client side is not enough if we are working on a Rest API automation project using playwright - by adding the server side mocking, we Don't need to use other frameworks or libraries. we'll have one automation framework that provides a full stack solution for both the frontend UI and the backend.

@mxschmitt
Copy link
Member

Great feature request! Some initial questions which help us to prioritise: Are you using a Meta-Framework like Next/Nuxt/SvelteKit/Remix etc? Are you using MSW? Are you using fetch() in the backend?

@sand4rt
Copy link
Collaborator

sand4rt commented May 13, 2024

Great feature request! Some initial questions which help us to prioritise: Are you using a Meta-Framework like Next/Nuxt/SvelteKit/Remix etc? Are you using MSW? Are you using fetch() in the backend?

I'm using those meta frameworks and i was looking for this feature too. Currently waiting for mswjs/msw#1617 to be merged, but would be great if this was provided by Playwright. It also comes in handy with component testing: #19399 (comment)

@Romarionijim
Copy link
Contributor Author

@mxschmitt the frameworks that are used at the company I work at is Nest js for the backend and Angular on the frontend.
I saw nock was being used for mocking.

@kennethvdberghe
Copy link

I would love to get this working for my Remix apps!

@david-mambou
Copy link

I second this too.

@alestuber
Copy link

I can't stress enough how much this is needed!
I'm loosing hours here trying to see how I can mock API request in my nextjs app.

I just upgraded the app from version 13 to 14 and now I'm installing another libraries and configurations to make this possible.

It should be as simple as route.fulfill() but for the backend... currently it's too much trouble for something almost any application that connects in a back-end API would need.

@mmersiades
Copy link

Great feature request! Some initial questions which help us to prioritise: Are you using a Meta-Framework like Next/Nuxt/SvelteKit/Remix etc? Are you using MSW? Are you using fetch() in the backend?

In my case, I'm using fetch() from Next.js server components / SSR pages

@esaari
Copy link

esaari commented Sep 21, 2024

Upvote for this as well, it would be great to be able to use Playwright as a one-stop framework for all things testing. In my case, the application was using got.

@hammond756
Copy link

hammond756 commented Sep 26, 2024

Very much wanted for me too! Without server side mocking I can't meaningfully scaffold my tests without coupling them to the data in my local/staging database.

I'm using NextJS and their extension of thefetch() api to call my backend services in server side components.

@kalm42
Copy link

kalm42 commented Oct 1, 2024

+1 Adding my vote for this feature.

@owaisahmad-dev
Copy link

Also in dire need of this feature for NUXT app

@ofirpardo-artlist
Copy link

Joining the fun, this would REALLY help.

@hernaanm
Copy link

@mxschmitt I find it very necessary, nowadays I am forced to use msw or mockserver/wiremock with their client libraries

@lubiah
Copy link

lubiah commented Dec 28, 2024

I really need this feature

@Wasifz9
Copy link

Wasifz9 commented Jan 8, 2025

would love this.

@rileyjhardy
Copy link

Yes, we need this desperately!

@jpowell
Copy link

jpowell commented Feb 11, 2025

Ditto. Cost us HOURS...

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests