60 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # Debugging Angular
 | ||
|  | 
 | ||
|  | The Angular project has comprehensive unit tests for the core packages and the tools. | ||
|  | The core packages are tested both in the browser (via Karma) and on the server (via Node.js). | ||
|  | 
 | ||
|  | ## Debugging in Karma
 | ||
|  | 
 | ||
|  | Run the unit tests as normal using via the `./test.sh` script. For example: | ||
|  | 
 | ||
|  | ```bash | ||
|  | ./test.sh browserNoRouter | ||
|  | ``` | ||
|  | 
 | ||
|  | Once the initial build has completed and the Karma server has started up, you can go to the | ||
|  | Chrome browser that is automatically opened, usually pointing to `http://localhost:9876`. | ||
|  | The script will sit watching for code changes, recompiling the changed files and triggering | ||
|  | further runs of the unit tests in the browser. | ||
|  | 
 | ||
|  | In this browser there is a "DEBUG" link (in the top right corner). Clicking this link will | ||
|  | open up a new tab that will run the unit tests and will not timeout, giving you time to | ||
|  | step through the code. | ||
|  | 
 | ||
|  | Open up this tab's developer console to access the source code viewer where you can set | ||
|  | breakpoints and interrogate the current stack and variables. | ||
|  | 
 | ||
|  | It is useful to focus your debugging on one test at a time by changing that test to be | ||
|  | defined using the `fit(...)` function, rather than `it(...)`. Moreover it can be helpful | ||
|  | to place a `debugger` statement in this `fit` clause to cause the debugger to stop when | ||
|  | it hits this test. | ||
|  | 
 | ||
|  | ## Debugging in Node
 | ||
|  | 
 | ||
|  | Run the unit tests as normal using the `./test.sh` script, but add the `--debug` flag to | ||
|  | the command. For example: | ||
|  | 
 | ||
|  | ```bash | ||
|  | ./test.sh node --debug | ||
|  | ``` | ||
|  | 
 | ||
|  | Once the initial building has completed, the script will watch for code changes, recompiling | ||
|  | and running the unit tests via a tool call `cjs-jasmine`. Due to the `--debug` flag, each | ||
|  | test run will create a debugging server listening on a port (such as 9229), which can be | ||
|  | connected to by a debugger. | ||
|  | 
 | ||
|  | You can use Chrome as the debugger by navigating to `chrome://inspect` then clicking the | ||
|  | "Open dedicated DevTools for Node" link. This will open up a Developer console, which will | ||
|  | automatically connect to the debugging server. | ||
|  | 
 | ||
|  | It is useful to focus your debugging on one test at a time by changing that test to be | ||
|  | defined using the `fit(...)` function, rather than `it(...)`. Moreover it can be helpful | ||
|  | to place a `debugger` statement in this `fit` clause to cause the debugger to stop when | ||
|  | it hits this test. | ||
|  | 
 | ||
|  | **Problem with node 6:** at the time of writing, the node process does not tell the Chrome | ||
|  | debugger when it has completed, and so the debugger is not able to automatically disconnect | ||
|  | from listening to the debugging server. To solve this, just close the developer tools window | ||
|  | after each run of the unit tests, before making changes to the code.  This is fixed in node 8 | ||
|  | and may be backported to node 6. This issue is tracked in | ||
|  | https://github.com/nodejs/node/pull/12814#issuecomment-309908579. |