0 votes
1 view
in Devops and Agile by (18.3k points)

I want to test my angular app with a 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, but it would also allow me to test for edge cases, like connection errors.

How can I do this with a protractor? I just started to set up 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 scope of the application.

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 its original form. However this currently only works with the deprecated ng-scenarios.

1 Answer

0 votes
by (48.8k points)

This blog post discusses advance usage scenarios for Protractor. In particular, it covers the little know addMockModule() method of the Protractor browser object, which allows you to create angular modules in Protractor (i.e. mocks or stubs of your API module) and uploads them to the browser to replace the real implementation within the context of a given spec or set of specs.

...