This project has been deprecated, please try using more low level npm packages for mocking. Nock Express Mocks Thanks
protractor-mock creates a more flexible interface for mocking $httpBackend requests in Protractor.
Basically, it allows you to keep all your mocking data structured in distinct files for each endpoint and never again copy/paste json data in your spec files. Also you can easily handle multiple endpoints or requests and custom response scenarios.
- CoffeScript
- AngularJs
- Angular Mocks (ngMockE2E)
- Protractor
- clone this repo or download the zip archive
- copy the
mock/folder into your e2e folder - Done
:](there is an example scenario file in the repoexample.spec.coffee)
First include the module in your spec files
mockModule = require './mock/http.coffee'Data files are angular modules that have mock data and responses for your endpoints.
You can create a data file for each endpoint or group of related endpoints. I suggest you keep all your data files in
the mock/data/ folder. Example data file /mock/data/example.data.coffee
-
Create your
.data.coffeefile in themock/data/folder -
Use the pattern from the example file
-
Use a unique name for your angular module ( angular.module("MockedGames", []) )
-
Mock your endpoints using
Mock.add(name, options)name- The name of the endpoint (you will reference this later asMock.nameso be careful)options- Object containing configuration data and response typesOption Type Description Required urlstring url of your endpoint, use the root endpoint because you can concatenate data later to it Yes responseobject configuration for all possible responses of this endpoint Yes response.dataobject mocked json data Yes response.*object You can attach custom response messages to be referenced later as Mock.name.response.xxx-
Include your data file in the http.coffee
games = require './data/example.data.coffee'Add it to the exports of the http.coffee module
module.exports.mockedGames = gamesReplace app-name with your main app module in http.coffee
angular.module("httpBackendMock", ["app-name", "ngMockE2E"]).run ['$httpBackend', 'Mock', ($httpBackend, Mock) ->Include the mock module into your spec files
mockModule = require './mock/http.coffee'Add required mock modules in your beforeEach statement
# Clear loaded mock modules
ptor.clearMockModules()
# Initialize http mock module
ptor.addMockModule 'httpBackendMockInit', mockModule.httpBackendMockInit
# Include your mocked data for games endpointsm you can add as many as you need
ptor.addMockModule 'MockedGames', mockModule.mockedGames Set the behaviour for your mocked endpoints, this has to be the first thing of your it statement
# Update behaviour for mocked endpoints
ptor.addMockModule 'httpBackendMockUpdate', () ->
angular.module('httpBackendMockUpdate', []).run ['Mock', (Mock) ->
Mock.endpoint(Mock.games, [
{
get:
response:
code: 200
content: 'Yes!'
}
{
get:
arguments: '/all'
response: Mock.entity.response.error.notFound
put:
response: Mock.entity.response.success
}
])
Mock.endpoint(Mock.consoles, [
{
get:
type: Mock.object
}
])
]
# Apply your mock module for http
ptor.addMockModule 'httpBackendMock', mockModule.httpBackendMockUse the Mock.endpoint(name, options) method to set your desired behaviour.
name - The name of the endpoint from the data file (ex Mock.Games)
options - Array of objects containing configuration data and method specific responses
| Option | Type | Description | Required | Default |
|---|---|---|---|---|
passThrough |
boolean | Ignore mocking, pass the request to your api | No | false |
arguments |
string | Parameters to be concatenated to your endpoint url | No | - |
type |
object | Type of returned data, values Mock.element, Mock.object, Mock.array |
No | - |
response |
object | Actual response data, you can use Mock.games.response.* objects |
Yes | - |
NOTES
options argument is an array of response objects, this way you can mock multiple endpoint variations. Also for each response object, you can set the behaviour for all the http available methods (i.e. get, post, put, delete).
If you select Mock.element as your type, and your response.data is an array the mocked endpoint will return the first element of the array.
As your response you can use one of your objects declared in the data file or you can create one on the fly, below you can see the properties of an response object.
| Option | Type | Description | Required | Default |
|---|---|---|---|---|
code |
integer | Returned http status code | Yes | 200 |
content |
object | Actual response string or json object | Yes | - |
headers |
array | An array containing headers that you want to mock | No | - |
For more information on protractor-mock hit me up @unDemian