Comments (2)
This is how I see such setup working:
// Do not confuse with the "spawnServer" utility already present
// to spawn a Webpack Dev Server. Naming is hard.
import { spawnServer } from '../utils/spawnServer'
let server
beforeAll(() => {
server = spawnServer(app => {
app.post('/users', (req, res) => {
res.status(301).json({ actual: 'response' })
})
})
})
afterAll(() => {
// Needs to return a Promise.
// If Express API doesn't do that, wrap in a custom function.
return server.instance.close()
})
describe('Test case', () => {
it("scenario", async () => {
// Abstracted API to get the proper route in order to not rely
// on exact server port number.
const REQUEST_URL = server.getRoute('/users')
api.page.evaluate((url) => fetch(url, { method: 'POST' }), REQUEST_URL)
// continue with assertions...
})
})
from msw.
Since MSW already has a spawnServer
utility function that's responsible for spawning a temporary WDS for the purpose of having a client page to load in Puppeteer, this task may be a matter of spawnServer
accepting a parameter that would modify the WDS's app
instance to declare the necessary routes.
spawnServer('/path/to/file.mocks.ts', {
withRoutes(app) {
app.post('/api/mock', (req, res) => {
res.status(200).json({ response: true })
})
}
})
The benefits we get from entwining this logic into existing spawnServer
:
- Manage only one instance of server that acts as both client-side page and a mock of an actual server implementation to assert test scenarios that requires such (i.e. Response patching)
- Have a single point of control over the server's lifecycle (it reports back its port number and a cleanup function, making its detection and termination easier inside tests)
from msw.
Related Issues (20)
- Add delay before each request HOT 3
- Mock a request that contains both query and path parameters
- TypeError: confirm is not a function HOT 7
- Failing to intercept an Axios request: Node 20.11 + Vitest 1.3.1 + MSW 2.2.1
- v2.2.2 does not intercept request in browser mode (CORS error) but v1.3.1 does HOT 3
- Infering the `boundary` callback arguments HOT 7
- support custom fetch option HOT 7
- support selecting interceptors HOT 1
- Set-Cookie responses containing commas are not handled correctly HOT 1
- HttpResponse.json() throwing TypeError: Right-hand side of 'instanceof' is not an object. HOT 1
- Request with FormData body makes Jest hang forever HOT 6
- TypeError: Right-hand side of 'instanceof' is not an object HOT 4
- Cannot read properties of undefined (reading 'url') HOT 5
- Mocked data getting empty string HOT 8
- "InvalidStateError: The object is in invalid state" when mocking rest api
- Unable to use msw/node for testing solid-js due to `resolve.conditions` set to `browser` HOT 5
- drop CommonJS support HOT 2
- quiet: true should supress RESPONSE LISTENER logs HOT 4
- Narrowing the response body type in `HttpResponse.json` HOT 16
- Error: No known conditions for "./browser" specifier in "msw" package HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from msw.