I had to figure out a way to make sure that when each browser was tested, the data that it created in the database wasn't interacting with any of the other tests. I managed to do this by using a multitenancy system based off the subdomain. (browser-beind-tested.localhost.com)
To run all of the tests simultaneously with different browsers being specified, I simply wrote up a shell script to run 3 commands at once:
karma start karma-e2e.conf.js --browsers=Chrome --proxies./=http://e2e-chrome.localsite.com:80/ &
karma start karma-e2e.conf.js --browsers=Firefox --proxies./=http://e2e-firefox.localsite.com:80/ &
karma start karma-e2e.conf.js --browsers=Safari --proxies./=http://e2e-safari.localsite.com:80/
Then I simply run the command:
sh run-e2e-tests.sh
Note: This doesn't allow me to run continuous integration tests (yet), because every time I want the tests to run, I have to manually run the shell script from the command line