protractor-http-client
HTTP Client library to use in protractor tests

What this library is about
Are you using protractor ? me too, and it's awesome! This library is a little utility
that allows you to make any HTTP call (GET, PUT, POST, ...) , leveraging the powerful request library.
This library allows you to call HTTP services before, after or during interactions within the browser.
Why is it useful?
for example, for setting up test data via REST API before a test is run, or cleaning up after a test has finished running.
It won't be easy to do the same with plain 'http' or 'request' module, as you will have to wait for the HTTP
call promise to complete, before using the protractor browser calls.
Instead, you have to just call e.g.
http.post("/database/users", {
username: "marco", password: "bigsecret"
})
browser.get("/login")
and the subsequent calls to protractor API will wait until the previous call finishes.
Requirements
- Protractor 3+ (tested with 3.3.0 and 4.0.14)
- Node 4.2+
Usage
If using Javascript specs
const HttpClient = require("protractor-http-client").HttpClient
If using Typescript specs
import {HttpClient} from "protractor-http-client"
const http = new HttpClient("https://example.com/")
const userGetResponse:ResponsePromise = http.get("/users/marco");
http.post("/users", {
username: "marco", password: "bigsecret"
}));
http.post("/form", "param1=value1¶m2=value2", {
"Content-Type": "application/x-www-form-urlencoded"
}));
http.failOnError = true
You have get
, post
, put
, delete
methods available.
get
and delete
methods do NOT accept request body.
For more complex requests, use the request
method shown below.
Passing complex request options
You can pass any options accepted by the request library, by passing an object to the request method
let options = { .... }
http.request(options)
Helper methods on response to check status and body
let response:ResponsePromise = http.get("/users/marco")
let jsonResponse:JsonPromise = response.jsonBody
let stringBody:Promise<string> = response.stringBody
let rawBody:Promise<Buffer> = response.body
let jsonPropertyValue:JsonPromise = response.jsonBody.get("propertyName")
expect(response.statusCode).toEqual(200)
expect(response.header("Content-Type")).toEqual("application/json")
expect(response.stringBody).toEqual('{"username":"marco","password":"bigsecret"}')
expect(response.jsonBody.get("username")).toEqual("marco")
Example spec with API setup
describe("the login page", () => {
beforeEach(() => {
const postResponse = http.post("/users", {
username: "marco", password: "bigsecret"
});
expect(postResponse.statusCode).toEqual(200)
})
afterEach(() => {
const deleteResponse = http.delete("/users/marco");
expect(deleteResponse.statusCode).toEqual(200)
})
it("will allow login with new user", () => {
browser.get("/login");
element(by.id("username")).sendKeys("marco")
element(by.id("password")).sendKeys("bigsecret")
element(by.id("login-button")).click()
})
})