A good way to verify application quality is end-to-end testing (E2E testing). While unit tests verify that pieces of code work correctly, E2E tests verify how the system works as a whole – they span the entire application from buttons to the database. If the unit test is green, well… it does not mean much. If an end-to-end test is green, it means that system works to some degree.
Both Angular and AngularJS have a native E2E testing solution called Protractor. The common approach to implementing E2E testing is to put all tests into a stand-alone application which you would run against the shared QA environment. With this approach, your tests are 100% external to the system under testing, which on one hand makes you “a real user,” but on the other hand, it limits the number of ways you can interact with the system to just one – user interface. There are few well-known difficulties with this approach: