11import { describe , it , expect , vi , beforeEach , afterEach } from "vitest" ;
22import { MessageQueue , MessageQueueGroup , type IMessageQueue } from "./message_queue" ;
33
4- // Mock chrome.runtime
5- global . chrome = {
6- runtime : {
7- onMessage : {
8- addListener : vi . fn ( ) ,
9- } ,
10- sendMessage : vi . fn ( ) ,
11- lastError : null ,
12- } ,
13- } as any ;
14-
154// Mock LoggerCore
165vi . mock ( "@App/app/logger/core" , ( ) => ( {
176 default : {
@@ -23,6 +12,8 @@ vi.mock("@App/app/logger/core", () => ({
2312 } ,
2413} ) ) ;
2514
15+ const nextTick = ( ) => Promise . resolve ( ) . then ( ( ) => { } ) ;
16+
2617describe ( "MessageQueueGroup" , ( ) => {
2718 let messageQueue : IMessageQueue ;
2819
@@ -36,55 +27,62 @@ describe("MessageQueueGroup", () => {
3627 } ) ;
3728
3829 describe ( "基本功能测试" , ( ) => {
39- it ( "应该能够创建分组" , ( ) => {
40- const group = messageQueue . group ( "test " ) ;
30+ it . concurrent ( "应该能够创建分组" , ( ) => {
31+ const group = messageQueue . group ( "api-group " ) ;
4132 expect ( group ) . toBeInstanceOf ( MessageQueueGroup ) ;
4233 } ) ;
4334
44- it ( "应该能够在分组中订阅和发布消息" , ( ) => {
45- const group = messageQueue . group ( "api" ) ;
35+ it . concurrent ( "应该能够在分组中订阅和发布消息" , ( ) => {
36+ const group = messageQueue . group ( "api-sendBasic " ) ;
4637 const handler = vi . fn ( ) ;
4738
48- group . subscribe ( "user " , handler ) ;
49- group . emit ( "user " , { id : 1 , name : "test" } ) ;
39+ group . subscribe ( "user1 " , handler ) ;
40+ group . emit ( "user1 " , { id : 1 , name : "test" } ) ;
5041
5142 expect ( handler ) . toHaveBeenCalledWith ( { id : 1 , name : "test" } ) ;
5243 } ) ;
5344
54- it ( "应该自动为分组名称添加斜杠" , ( ) => {
45+ it . concurrent ( "应该自动为分组名称添加斜杠" , ( ) => {
5546 const group1 = messageQueue . group ( "group1" ) ;
5647 const group2 = messageQueue . group ( "group2/" ) ;
5748
5849 const handler1 = vi . fn ( ) ;
5950 const handler2 = vi . fn ( ) ;
51+ const handler3 = vi . fn ( ) ;
52+ const handler4 = vi . fn ( ) ;
6053
61- group1 . subscribe ( "test" , handler1 ) ;
62- group2 . subscribe ( "test" , handler2 ) ;
54+ group1 . subscribe ( "test1" , handler1 ) ;
55+ group2 . subscribe ( "test1" , handler2 ) ;
56+ group1 . subscribe ( "test2" , handler3 ) ;
57+ group2 . subscribe ( "test2" , handler4 ) ;
6358
6459 // 直接通过 messageQueue 发布消息来验证主题名称
65- messageQueue . emit ( "group1/test " , "message1" ) ;
66- messageQueue . emit ( "group2/test " , "message2" ) ;
60+ messageQueue . emit ( "group1/test1 " , "message1" ) ;
61+ messageQueue . emit ( "group2/test1 " , "message2" ) ;
6762
6863 expect ( handler1 ) . toHaveBeenCalledWith ( "message1" ) ;
6964 expect ( handler2 ) . toHaveBeenCalledWith ( "message2" ) ;
65+
66+ expect ( handler3 ) . not . toHaveBeenCalled ( ) ;
67+ expect ( handler4 ) . not . toHaveBeenCalled ( ) ;
7068 } ) ;
7169
72- it ( "应该能够创建嵌套分组" , ( ) => {
73- const apiGroup = messageQueue . group ( "api" ) ;
74- const userGroup = apiGroup . group ( "user " ) ;
70+ it . concurrent ( "应该能够创建嵌套分组" , ( ) => {
71+ const apiGroup = messageQueue . group ( "api-groupNested " ) ;
72+ const userGroup = apiGroup . group ( "user2 " ) ;
7573 const profileGroup = userGroup . group ( "profile" ) ;
7674
7775 const handler = vi . fn ( ) ;
78- profileGroup . subscribe ( "get " , handler ) ;
76+ profileGroup . subscribe ( "get1 " , handler ) ;
7977
80- profileGroup . emit ( "get " , { userId : 123 } ) ;
78+ profileGroup . emit ( "get1 " , { userId : 123 } ) ;
8179
8280 expect ( handler ) . toHaveBeenCalledWith ( { userId : 123 } ) ;
8381 } ) ;
8482 } ) ;
8583
8684 describe ( "中间件功能测试" , ( ) => {
87- it ( "应该能够添加和执行中间件" , async ( ) => {
85+ it . concurrent ( "应该能够添加和执行中间件" , async ( ) => {
8886 const middlewareOrder : string [ ] = [ ] ;
8987
9088 const middleware = vi . fn ( ( topic : string , message : any , next : ( ) => void ) => {
@@ -93,26 +91,26 @@ describe("MessageQueueGroup", () => {
9391 middlewareOrder . push ( "middleware-after" ) ;
9492 } ) ;
9593
96- const group = messageQueue . group ( "api" , middleware ) ;
94+ const group = messageQueue . group ( "api-middleware " , middleware ) ;
9795
9896 const handler = vi . fn ( ( ) => {
99- middlewareOrder . push ( "handler" ) ;
97+ middlewareOrder . push ( "handler-middle " ) ;
10098 } ) ;
10199
102- group . subscribe ( "test " , handler ) ;
100+ group . subscribe ( "good " , handler ) ;
103101
104102 // 等待异步操作
105- group . emit ( "test " , { data : "test " } ) ;
103+ group . emit ( "good " , { data : "bye " } ) ;
106104
107- // 使用 setTimeout 确保异步操作完成
108- await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
105+ await nextTick ( ) ;
106+ await nextTick ( ) ;
109107
110- expect ( middlewareOrder ) . toEqual ( [ "middleware-before" , "handler" , "middleware-after" ] ) ;
111- expect ( middleware ) . toHaveBeenCalledWith ( "api/test " , { data : "test " } , expect . any ( Function ) ) ;
112- expect ( handler ) . toHaveBeenCalledWith ( { data : "test " } ) ;
108+ expect ( middlewareOrder ) . toEqual ( [ "middleware-before" , "handler-middle " , "middleware-after" ] ) ;
109+ expect ( middleware ) . toHaveBeenCalledWith ( "api-middleware/good " , { data : "bye " } , expect . any ( Function ) ) ;
110+ expect ( handler ) . toHaveBeenCalledWith ( { data : "bye " } ) ;
113111 } ) ;
114112
115- it ( "应该能够使用 use 方法添加中间件" , async ( ) => {
113+ it . concurrent ( "应该能够使用 use 方法添加中间件" , async ( ) => {
116114 const middlewareOrder : string [ ] = [ ] ;
117115
118116 const middleware1 = vi . fn ( ( topic : string , message : any , next : ( ) => void ) => {
@@ -127,27 +125,28 @@ describe("MessageQueueGroup", () => {
127125 middlewareOrder . push ( "middleware2-after" ) ;
128126 } ) ;
129127
130- const group = messageQueue . group ( "api " ) . use ( middleware1 ) . use ( middleware2 ) ;
128+ const group = messageQueue . group ( "group-08 " ) . use ( middleware1 ) . use ( middleware2 ) ;
131129
132130 const handler = vi . fn ( ( ) => {
133- middlewareOrder . push ( "handler" ) ;
131+ middlewareOrder . push ( "handler-08 " ) ;
134132 } ) ;
135133
136- group . subscribe ( "test" , handler ) ;
137- group . emit ( "test" , { data : "test" } ) ;
134+ group . subscribe ( "test-08 " , handler ) ;
135+ group . emit ( "test-08 " , { data : "test-08 " } ) ;
138136
139- await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
137+ await nextTick ( ) ;
138+ await nextTick ( ) ;
140139
141140 expect ( middlewareOrder ) . toEqual ( [
142141 "middleware1-before" ,
143142 "middleware2-before" ,
144- "handler" ,
143+ "handler-08 " ,
145144 "middleware2-after" ,
146145 "middleware1-after" ,
147146 ] ) ;
148147 } ) ;
149148
150- it ( "子分组应该继承父分组的中间件" , async ( ) => {
149+ it . concurrent ( "子分组应该继承父分组的中间件" , async ( ) => {
151150 const middlewareOrder : string [ ] = [ ] ;
152151
153152 const parentMiddleware = vi . fn ( ( topic : string , message : any , next : ( ) => void ) => {
@@ -164,108 +163,112 @@ describe("MessageQueueGroup", () => {
164163 const childGroup = parentGroup . group ( "child" , childMiddleware ) ;
165164
166165 const handler = vi . fn ( ( ) => {
167- middlewareOrder . push ( "handler" ) ;
166+ middlewareOrder . push ( "handler-09 " ) ;
168167 } ) ;
169168
170- childGroup . subscribe ( "test" , handler ) ;
171- childGroup . emit ( "test" , { data : "test" } ) ;
169+ childGroup . subscribe ( "test-09 " , handler ) ;
170+ childGroup . emit ( "test-09 " , { data : "test-09 " } ) ;
172171
173- await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
172+ await nextTick ( ) ;
173+ await nextTick ( ) ;
174174
175- expect ( middlewareOrder ) . toEqual ( [ "parent-middleware" , "child-middleware" , "handler" ] ) ;
175+ expect ( middlewareOrder ) . toEqual ( [ "parent-middleware" , "child-middleware" , "handler-09 " ] ) ;
176176 } ) ;
177177
178- it ( "应该支持异步中间件" , async ( ) => {
178+ it . concurrent ( "应该支持异步中间件" , async ( ) => {
179179 const asyncMiddleware = vi . fn ( async ( topic : string , message : any , next : ( ) => void ) => {
180- await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
180+ await nextTick ( ) ;
181181 next ( ) ;
182182 } ) ;
183183
184- const group = messageQueue . group ( "api" , asyncMiddleware ) ;
184+ const group = messageQueue . group ( "api-middlewareAsync " , asyncMiddleware ) ;
185185 const handler = vi . fn ( ) ;
186186
187- group . subscribe ( "test " , handler ) ;
188- group . emit ( "test " , { data : "test " } ) ;
187+ group . subscribe ( "test4 " , handler ) ;
188+ group . emit ( "test4 " , { data : "test4 " } ) ;
189189
190190 // 等待异步操作完成
191- await new Promise ( ( resolve ) => setTimeout ( resolve , 20 ) ) ;
191+ await nextTick ( ) ;
192+ await nextTick ( ) ;
192193
193194 expect ( asyncMiddleware ) . toHaveBeenCalled ( ) ;
194- expect ( handler ) . toHaveBeenCalledWith ( { data : "test " } ) ;
195+ expect ( handler ) . toHaveBeenCalledWith ( { data : "test4 " } ) ;
195196 } ) ;
196197 } ) ;
197198
198199 describe ( "发布方法测试" , ( ) => {
199- it ( "publish 方法应该使用 chrome.runtime.sendMessage" , ( ) => {
200- const group = messageQueue . group ( "api" ) ;
200+ it . concurrent ( "publish 方法应该使用 chrome.runtime.sendMessage" , ( ) => {
201+ const group = messageQueue . group ( "api-sendChromeMessage " ) ;
201202
202- group . publish ( "test" , { data : "test" } ) ;
203+ const sendSpy = vi . spyOn ( chrome . runtime , "sendMessage" ) ;
204+ group . publish ( "test-sendChromeMessage" , { data : "test-sendChromeMessage" } ) ;
203205
204- expect ( chrome . runtime . sendMessage ) . toHaveBeenCalledWith ( {
205- msgQueue : "api/test" ,
206- data : { action : "message" , message : { data : "test" } } ,
206+ expect ( sendSpy ) . toHaveBeenCalledWith ( {
207+ msgQueue : "api-sendChromeMessage /test-sendChromeMessage " ,
208+ data : { action : "message" , message : { data : "test-sendChromeMessage " } } ,
207209 } ) ;
208210 } ) ;
209211
210- it ( "emit 方法应该只在本地发布" , ( ) => {
211- const group = messageQueue . group ( "api" ) ;
212+ it . concurrent ( "emit 方法应该只在本地发布" , ( ) => {
213+ const group = messageQueue . group ( "api-emitLocal " ) ;
212214 const handler = vi . fn ( ) ;
213215
214- group . subscribe ( "test" , handler ) ;
215- group . emit ( "test" , { data : "test" } ) ;
216+ const sendSpy = vi . spyOn ( chrome . runtime , "sendMessage" ) ;
217+ group . subscribe ( "test-emitLocal" , handler ) ;
218+ group . emit ( "test-emitLocal" , { data : "test-emitLocal" } ) ;
216219
217- expect ( handler ) . toHaveBeenCalledWith ( { data : "test" } ) ;
218- expect ( chrome . runtime . sendMessage ) . not . toHaveBeenCalled ( ) ;
220+ expect ( handler ) . toHaveBeenCalledWith ( { data : "test-emitLocal " } ) ;
221+ expect ( sendSpy ) . not . toHaveBeenCalled ( ) ;
219222 } ) ;
220223 } ) ;
221224
222225 describe ( "取消订阅功能" , ( ) => {
223- it ( "应该能够取消订阅" , ( ) => {
224- const group = messageQueue . group ( "api" ) ;
226+ it . concurrent ( "应该能够取消订阅" , ( ) => {
227+ const group = messageQueue . group ( "api-unsubscribe " ) ;
225228 const handler = vi . fn ( ) ;
226229
227- const unsubscribe = group . subscribe ( "test" , handler ) ;
230+ const unsubscribe = group . subscribe ( "test-unsubscribe " , handler ) ;
228231
229232 // 发布消息,应该收到
230- group . emit ( "test" , { data : "test1" } ) ;
233+ group . emit ( "test-unsubscribe " , { data : "test1" } ) ;
231234 expect ( handler ) . toHaveBeenCalledWith ( { data : "test1" } ) ;
232235
233236 // 取消订阅
234237 unsubscribe ( ) ;
235238
236239 // 再次发布消息,不应该收到
237- group . emit ( "test" , { data : "test2" } ) ;
240+ group . emit ( "test-unsubscribe " , { data : "test2" } ) ;
238241 expect ( handler ) . toHaveBeenCalledTimes ( 1 ) ;
239242 } ) ;
240243 } ) ;
241244
242245 describe ( "边界情况测试" , ( ) => {
243- it ( "没有中间件的分组应该正常工作" , ( ) => {
244- const group = messageQueue . group ( "api" ) ;
246+ it . concurrent ( "没有中间件的分组应该正常工作" , ( ) => {
247+ const group = messageQueue . group ( "api-groupNoMiddleware " ) ;
245248 const handler = vi . fn ( ) ;
246249
247- group . subscribe ( "test" , handler ) ;
248- group . emit ( "test" , { data : "test" } ) ;
250+ group . subscribe ( "test-groupNoMiddleware " , handler ) ;
251+ group . emit ( "test-groupNoMiddleware " , { data : "test-groupNoMiddleware " } ) ;
249252
250- expect ( handler ) . toHaveBeenCalledWith ( { data : "test" } ) ;
253+ expect ( handler ) . toHaveBeenCalledWith ( { data : "test-groupNoMiddleware " } ) ;
251254 } ) ;
252255
253- it ( "应该能够处理复杂的数据类型" , ( ) => {
254- const group = messageQueue . group ( "api" ) ;
256+ it . concurrent ( "应该能够处理复杂的数据类型" , ( ) => {
257+ const group = messageQueue . group ( "api-complexPayload " ) ;
255258 const handler = vi . fn ( ) ;
256259
257260 const complexData = {
258261 array : [ 1 , 2 , 3 ] ,
259262 object : { nested : true } ,
260263 number : 42 ,
261- string : "test" ,
264+ string : "test-complexPayload " ,
262265 boolean : true ,
263266 null : null ,
264267 undefined : undefined ,
265268 } ;
266269
267- group . subscribe ( "test" , handler ) ;
268- group . emit ( "test" , complexData ) ;
270+ group . subscribe ( "test-complexPayload " , handler ) ;
271+ group . emit ( "test-complexPayload " , complexData ) ;
269272
270273 expect ( handler ) . toHaveBeenCalledWith ( complexData ) ;
271274 } ) ;
0 commit comments