sTeam-web-UI
is an application written in angular. So the application relies on sTeam's
existing REST api which is written in pike. Since there are a lot of API calls and actions involved ensuring that the application is making proper API calls and getting proper responses is crucial. In order to go ahead with the API testing there are two important things to be know about first.
frisby
jasmine
What is frisby
?
“Frisby is a REST API testing framework built on node.js and Jasmine that makes testing API endpoints easy, fast, and fun. Read below for a quick overview, or check out the API documentation.”
What is Jasmine
?
“Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it’s suited for websites, Node.js projects, or anywhere that JavaScript can run.”
The api methods present in frisby can be categorized into :
Expectations
Helpers
Headers
Inspectors
So let me show couple of tests that are written with the help of frisby for the sTeam's web interface.
Checking the Home directory of the user :
frisby.create('Request `/home` returns proper JSON')
.get(config.baseurl + 'rest.pike?request=/home')
.expectStatus(200)
.expectJSON({
'request': '/home',
'request-method': 'GET',
'me': objUnit.testMeObj,
'inventory': function (val) {
val.forEach(function (e) {
objUnit.testInventoryObj(e)
})
}
})
.toss()
Checking the container of the user :
frisby.create('Request `/home/:user` returns proper JSON')
.get(config.baseurl + 'rest.pike?request=/home/akhilhector/container')
.expectStatus(200)
.expectJSON({
'request': '/akhilhector',
'request-method': 'GET',
'me': objUnit.testMeObj,
'inventory': function (val) {
val.forEach(function (e) {
objUnit.testInventoryObj(e)
})
}
})
.toss()
Accessing the file in the user’s workarea :
frisby.create('Request `/home/:user/:container/:filename` returns proper JSON')
.get(config.baseurl + 'rest.pike?request=//home/akhilhector/playground-hector/icon1.png')
.expectStatus(200)
.expectJSON({
'request': '/akhilhector/playground-hector/icon1.png',
'request-method': 'GET',
'me': objUnit.testMeObj,
'inventory': function (val) {
val.forEach(function (e) {
objUnit.testInventoryObj(e)
})
}
})
.toss()
Observing the above three modules, each of them are different from one another. We have to understand that depending on the API the request payload must be sent. So for suppose the API needs authentication headers to be sent then we need to use the proper helper methods of frisby in order to send the same.
The .get()
can be substituted with put, post, delete
. Basically all the frisby tests start with frisby.create
with a description of the test followed by one of get, post, put, delete, or head, and ending with toss to generate the resulting response.
Apart from the request payload there is an interesting thing with the helper method expectJSON
, it is used for testing the given path or full JSON response of the specified length. In order to use expectJSON
we must pass the path
as the primary argument and the JSON as the second argument.
The expectStatus
helper method is pretty straightforward. It helps us in determining the HTTP Status code equivalent of the request so made.
NOTE
While writing the tests it is better to put all the config in one place and use that config variable for all the operations.
Thats it folks,
Happy Hacking !!
You must be logged in to post a comment.