@@ -431,18 +431,20 @@ it('can return a value multiple times', () => {
431
431
432
432
## 请求
433
433
434
- 因为 Vitest 运行在 Node 环境中,所以模拟网络请求是一件非常棘手的事情;由于没有办法使用 Web API,因此我们需要一些可以为我们模拟网络行为的包。推荐使用 [ Mock Service Worker] ( https://mswjs.io/ ) 来进行这个操作。它可以模拟 ` REST ` 和 ` GraphQL ` 网络请求,并且与框架无关。
434
+ 因为 Vitest 运行在 Node 环境中,所以模拟网络请求是一件非常棘手的事情;由于没有办法使用 Web API,因此我们需要一些可以为我们模拟网络行为的包。推荐使用 [ Mock Service Worker] ( https://mswjs.io/ ) 来进行这个操作。它可以模拟 ` http ` 、 ` WebSocket ` 和 ` GraphQL ` 网络请求,并且与框架无关。
435
435
436
436
Mock Service Worker (MSW) 的工作原理是拦截测试请求,让我们可以在不更改任何应用代码的情况下使用它。在浏览器中,它使用 [ Service Worker API] ( https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API ) 。在 Node.js 和 Vitest 中,它使用 [ ` @mswjs/interceptors ` ] ( https://github.com/mswjs/interceptors ) 库。要了解有关 MSW 的更多信息,请阅读他们的 [ introduction] ( https://mswjs.io/docs/ ) 。
437
437
438
438
### 配置
439
439
440
- 您可以像下面一样在您的 [ setup file] ( /config/#setupfiles )
440
+ 你可以像下面一样在你的 [ setup file] ( /config/#setupfiles )
441
441
442
- ``` js
442
+ ::: code-group
443
+
444
+ ``` js [HTTP Setup]
443
445
import { afterAll , afterEach , beforeAll } from ' vitest'
444
446
import { setupServer } from ' msw/node'
445
- import { HttpResponse , graphql , http } from ' msw'
447
+ import { http , HttpResponse } from ' msw'
446
448
447
449
const posts = [
448
450
{
@@ -460,6 +462,33 @@ export const restHandlers = [
460
462
}),
461
463
]
462
464
465
+ const server = setupServer (... restHandlers)
466
+
467
+ // 在所有测试之前启动服务器
468
+ beforeAll (() => server .listen ({ onUnhandledRequest: ' error' }))
469
+
470
+ // 所有测试完成后关闭服务器
471
+ afterAll (() => server .close ())
472
+
473
+ // 在每个测试后重置处理程序以实现测试隔离
474
+ afterEach (() => server .resetHandlers ())
475
+ ```
476
+
477
+ ``` js [GrapQL Setup]
478
+ import { afterAll , afterEach , beforeAll } from ' vitest'
479
+ import { setupServer } from ' msw/node'
480
+ import { graphql , HttpResponse } from ' msw'
481
+
482
+ const posts = [
483
+ {
484
+ userId: 1 ,
485
+ id: 1 ,
486
+ title: ' first post title' ,
487
+ body: ' first post body' ,
488
+ },
489
+ // ...
490
+ ]
491
+
463
492
const graphqlHandlers = [
464
493
graphql .query (' ListPosts' , () => {
465
494
return HttpResponse .json ({
@@ -468,19 +497,49 @@ const graphqlHandlers = [
468
497
}),
469
498
]
470
499
471
- const server = setupServer (... restHandlers, ... graphqlHandlers)
500
+ const server = setupServer (... graphqlHandlers)
472
501
473
- // 在所有测试之前启动服务器
502
+ // Start server before all tests
474
503
beforeAll (() => server .listen ({ onUnhandledRequest: ' error' }))
475
504
476
- // 所有测试后关闭服务器
505
+ // Close server after all tests
477
506
afterAll (() => server .close ())
478
507
479
- // 每次测试后重置处理程序 `对测试隔离很重要`
508
+ // Reset handlers after each test for test isolation
480
509
afterEach (() => server .resetHandlers ())
481
510
```
482
511
483
- > 使用 ` onUnhandleRequest: 'error' ` 配置服务器可以确保即使某个请求没有相应的请求处理程序,也会抛出错误。
512
+ ``` js [WebSocket Setup]
513
+ import { afterAll , afterEach , beforeAll } from ' vitest'
514
+ import { setupServer } from ' msw/node'
515
+ import { ws } from ' msw'
516
+
517
+ const chat = ws .link (' wss://chat.example.com' )
518
+
519
+ const wsHandlers = [
520
+ chat .addEventListener (' connection' , ({ client }) => {
521
+ client .addEventListener (' message' , (event ) => {
522
+ console .log (' Received message from client:' , event .data )
523
+ // Echo the received message back to the client
524
+ client .send (` Server received: ${ event .data } ` )
525
+ })
526
+ }),
527
+ ]
528
+
529
+ const server = setupServer (... wsHandlers)
530
+
531
+ // Start server before all tests
532
+ beforeAll (() => server .listen ({ onUnhandledRequest: ' error' }))
533
+
534
+ // Close server after all tests
535
+ afterAll (() => server .close ())
536
+
537
+ // Reset handlers after each test for test isolation
538
+ afterEach (() => server .resetHandlers ())
539
+ ```
540
+ :::
541
+
542
+ > Configuring the server with ` onUnhandledRequest: 'error' ` ensures that an error is thrown whenever there is a request that does not have a corresponding request handler.
484
543
485
544
### 了解更多
486
545
0 commit comments