diff --git a/protractor-http-mock/protractor-http-mock-tests.ts b/protractor-http-mock/protractor-http-mock-tests.ts
new file mode 100644
index 000000000..6c39f1401
--- /dev/null
+++ b/protractor-http-mock/protractor-http-mock-tests.ts
@@ -0,0 +1,212 @@
+///
+
+function TestConfig() {
+ mock.config = {
+ rootDirectory: 'root',
+ protractorConfig: 'protractor.conf.js'
+ };
+}
+
+function TestCtorOverloads() {
+ let noParam: mock.ProtractorHttpMock = mock();
+ let emptyArray: mock.ProtractorHttpMock = mock([]);
+ let mockFiles: mock.ProtractorHttpMock = mock(['mock1', 'mock2']);
+ let skipDefaults: mock.ProtractorHttpMock = mock([], true);
+
+ let del: mock.requests.Delete = {
+ request: {
+ path: 'path',
+ method: 'DELETE'
+ },
+ response: {
+ status: 400,
+ data: 1
+ }
+ };
+ let put: mock.requests.Put = {
+ request: {
+ path: 'path',
+ method: 'PUT'
+ },
+ response: {
+ status: 400,
+ data: 1
+ }
+ };
+ let mocks: mock.ProtractorHttpMock = mock([del, put]);
+}
+
+function TestTeardown() {
+ mock.teardown();
+}
+
+function TestRequestsMade() {
+ let values: Array;
+ mock.requestsMade().then(v => values = v);
+}
+
+function TestClearRequests() {
+ let promiseValue: boolean;
+ mock.clearRequests().then(value => {
+ promiseValue = value;
+ });
+}
+
+function TestGetRequestDefinitions() {
+ let getMinium: mock.requests.Get = {
+ request: {
+ path: 'path',
+ method: 'GET'
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+
+ let getParams: mock.requests.Get = {
+ request: {
+ path: 'path',
+ method: 'GET',
+ params: {
+ param1: 'param1',
+ param2: 2
+ }
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+
+ let post: mock.requests.Post = {
+ request: {
+ path: 'path',
+ method: 'POST'
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+
+ let getQueryString: mock.requests.Get = {
+ request: {
+ path: 'path',
+ method: 'GET',
+ queryString: {
+ query1: 'query1',
+ query2: 2
+ }
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+
+ let getHeaders: mock.requests.Get = {
+ request: {
+ path: 'path',
+ method: 'GET',
+ headers: {
+ head1: 'head1',
+ head2: 'head2'
+ }
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+}
+
+function TestPostRequestDefinitions() {
+ let post: mock.requests.Post = {
+ request: {
+ path: 'path',
+ method: 'POST'
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+
+ let postData: mock.requests.PostData = {
+ request: {
+ path: 'path',
+ method: 'POST',
+ data: 'data'
+ },
+ response: {
+ data: 1,
+ status: 500
+ }
+ };
+}
+
+function TestHeadRequestDefinitions() {
+ let head: mock.requests.Head = {
+ request: {
+ path: 'path',
+ method: 'HEAD'
+ },
+ response: {
+ status: 500,
+ data: 1
+ }
+ };
+}
+
+function TestDeleteRequestDefinitions() {
+ let del: mock.requests.Delete = {
+ request: {
+ path: 'path',
+ method: 'DELETE'
+ },
+ response: {
+ status: 500,
+ data: 1
+ }
+ };
+}
+
+function TestPutRequestDefinitions() {
+ let put: mock.requests.Put = {
+ request: {
+ path: 'path',
+ method: 'PUT'
+ },
+ response: {
+ status: 500,
+ data: 1
+ }
+ };
+}
+
+function TestPatchRequestDefinitions() {
+ let patch: mock.requests.Patch = {
+ request: {
+ path: 'path',
+ method: 'PATCH'
+ },
+ response: {
+ status: 500,
+ data: 1
+ }
+ };
+}
+
+function TestJsonpRequestDefinitions() {
+ let jsonp: mock.requests.Jsonp = {
+ request: {
+ path: 'path',
+ method: 'JSONP'
+ },
+ response: {
+ status: 500,
+ data: 1
+ }
+ };
+}
diff --git a/protractor-http-mock/protractor-http-mock.d.ts b/protractor-http-mock/protractor-http-mock.d.ts
new file mode 100644
index 000000000..41c4ef41f
--- /dev/null
+++ b/protractor-http-mock/protractor-http-mock.d.ts
@@ -0,0 +1,209 @@
+// Type definitions for protractor-http-mock
+// Project: https://github.com/atecarlos/protractor-http-mock
+// Definitions by: Crevil
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare module mock {
+ interface ProtractorHttpMock {
+ /**
+ * Instantiate mock module. This must be done before the browser connects.
+ *
+ * @param mocks An array of mock modules to load into the application.
+ * @param skipDefaults Set true to skip loading of default mocks.
+ */
+ (mocks?: Array>, skipDefaults?: boolean): ProtractorHttpMock;
+
+ /**
+ * Instantiate mock modules from files. This must be done before the browser connects.
+ *
+ * @param mocks An array of mock module names relative to the rootDirectory configuration.
+ */
+ (mocks: Array): ProtractorHttpMock;
+
+ /**
+ * Clean up.
+ * Typically done in the afterEach call to ensure the teardown
+ * is executed regardless of what happens in the test execution.
+ */
+ teardown(): void;
+
+ /**
+ * Returns a promise that will be resolved with an array of
+ * all matched HTTP requests.
+ */
+ requestsMade(): webdriver.promise.Promise>;
+
+ /**
+ * Returns a promise that will be resolved with a true boolean
+ * when all matched HTTP requests are cleared.
+ */
+ clearRequests(): webdriver.promise.Promise;
+
+ /**
+ * Module configuration to setup
+ */
+ config: {
+ /**
+ * Mocks directory where mock files are located.
+ * Default: process.cwd()
+ */
+ rootDirectory?: string;
+
+ /**
+ * Path to protractor configuration file.
+ * Default: protractor.conf
+ */
+ protractorConfig?: string;
+ };
+ }
+
+ /**
+ * Matched request.
+ */
+ interface ReceivedRequest {
+ url: string;
+ method: string;
+ }
+
+ module requests {
+ /**
+ * Base request mock used for all mocks.
+ */
+ interface BaseRequest {
+ request: {
+ method: string;
+ path: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * GET request mock.
+ */
+ interface Get extends BaseRequest {
+ request: {
+ method: string;
+ path: string;
+ params?: Object;
+ queryString?: Object;
+ headers?: Object;
+ interceptedRequest?: boolean;
+ interceptedAnonymousRequest?: boolean;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * POST request mock with payload.
+ */
+ interface PostData extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ data: TPayload;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * POST request mock.
+ */
+ interface Post extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * HEAD request mock.
+ */
+ interface Head extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * HTTP Delete request mock.
+ */
+ interface Delete extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * PUT request mock.
+ */
+ interface Put extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * PATCH request mock.
+ */
+ interface Patch extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+
+ /**
+ * JSONP request mock.
+ */
+ interface Jsonp extends BaseRequest {
+ request: {
+ path: string;
+ method: string;
+ };
+ response: {
+ status: number;
+ data: TResponse;
+ };
+ }
+ }
+}
+
+declare var mock: mock.ProtractorHttpMock;
+
+declare module 'protractor-http-mock' {
+ export = mock;
+}