I want to test my angular app with protractor. The app has an API Module that talks to the server During these tests I want to mock this Api Module. I don't want to do full integration tests, but tests from the user input with expected values from the API. Not only could this make the client tests faster, it would also allow me to test for edge cases, like connection errors.
How can I do this with protractor? I just started to setup integration tests.
I used the npm protractor module, installed selenium, adjusted the default config and used the onProtractorRunner.js to verify my setup works.
What is the recommended way of mocking? I assume that the mocking has to be done within the browser and not directly in the test file. I assume that the commands in the test file are protractor specific and will be sent to the selenium runners. Therefore I can't share javascript objects during the session and the test.
I somehow expect that I will need a spy library like sinon.js or is this already included in protractor?
Edit: I read about this issue in the protractor issue tracker, which could be a way to do it. Basically you write a Mock Module in the test, that is sent to be executed in the browser/ the applications scope.
Edit: Here are more promising Issues. The first talks about adding Mocks to the Angular App. The second talks about mocking the backend.
This looks really nice, in this case the Angular App would stay in it's original form. However this currently only works with the deprecated ng-scenarios.
This blog post discusses advance usage scenarios for Protractor. In particular it covers the the little know addMockModule()
method of the Protractor browser object. The method allows you to create angular modules in Protractor (i.e. mocks or stubs of your API module) and upload them to the browser to replace the real implementation within the context of a given spec or set of specs.