| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-15 20:51:52 +08:00
										 |  |  | require("./helpers/warmup-webpack"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | const path = require("path"); | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | const fs = require("graceful-fs"); | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | const rimraf = require("rimraf"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-29 06:10:15 +08:00
										 |  |  | describe("Profiling Plugin", function () { | 
					
						
							| 
									
										
										
										
											2021-05-19 14:32:13 +08:00
										 |  |  | 	jest.setTimeout(120000); | 
					
						
							| 
									
										
										
										
											2019-01-02 17:34:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 	it("should handle output path with folder creation", done => { | 
					
						
							| 
									
										
										
										
											2021-07-15 20:51:52 +08:00
										 |  |  | 		const webpack = require("../"); | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 		const outputPath = path.join(__dirname, "js/profilingPath"); | 
					
						
							|  |  |  | 		const finalPath = path.join(outputPath, "events.json"); | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 		rimraf(outputPath, () => { | 
					
						
							| 
									
										
										
										
											2021-05-19 14:32:13 +08:00
										 |  |  | 			const startTime = process.hrtime(); | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 			const compiler = webpack({ | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 				context: __dirname, | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 				entry: "./fixtures/a.js", | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 				output: { | 
					
						
							|  |  |  | 					path: path.join(__dirname, "js/profilingOut") | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 				plugins: [ | 
					
						
							|  |  |  | 					new webpack.debug.ProfilingPlugin({ | 
					
						
							|  |  |  | 						outputPath: finalPath | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 				] | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			compiler.run(err => { | 
					
						
							|  |  |  | 				if (err) return done(err); | 
					
						
							| 
									
										
										
										
											2021-05-19 14:32:13 +08:00
										 |  |  | 				const testDuration = process.hrtime(startTime); | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 				if (!fs.existsSync(outputPath)) | 
					
						
							|  |  |  | 					return done(new Error("Folder should be created.")); | 
					
						
							| 
									
										
										
										
											2021-01-20 23:41:00 +08:00
										 |  |  | 				const data = require(finalPath); | 
					
						
							|  |  |  | 				const maxTs = data.reduce((max, entry) => Math.max(max, entry.ts), 0); | 
					
						
							|  |  |  | 				const minTs = data[0].ts; | 
					
						
							|  |  |  | 				const duration = maxTs - minTs; | 
					
						
							| 
									
										
										
										
											2021-05-19 14:32:13 +08:00
										 |  |  | 				expect(duration).toBeLessThan( | 
					
						
							|  |  |  | 					testDuration[0] * 1000000 + testDuration[1] / 1000 | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2021-01-20 23:41:00 +08:00
										 |  |  | 				const cpuProfile = data.find(entry => entry.name === "CpuProfile"); | 
					
						
							|  |  |  | 				expect(cpuProfile).toBeTypeOf("object"); | 
					
						
							|  |  |  | 				const profile = cpuProfile.args.data.cpuProfile; | 
					
						
							|  |  |  | 				expect(profile.startTime).toBeGreaterThanOrEqual(minTs); | 
					
						
							|  |  |  | 				expect(profile.endTime).toBeLessThanOrEqual(maxTs); | 
					
						
							| 
									
										
										
										
											2018-12-29 07:21:24 +08:00
										 |  |  | 				done(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }); |