Jasmine provides a wide list of built-in matchers:
Arrays:
expect(array).toBeArray();
expect(array).toBeArrayOfNumbers();
expect(array).toBeEmptyArray();
Booleans:
expect(boolean).toBeBoolean();
expect(boolean).toBeFalse();
expect(boolean).toBeTrue();
Mix:
expect(instance).toBe(instance);
expect(number).toBeGreaterThan(number);
expect(number).toBeLessThan(number);
expect(mixed).toBeNull();
expect(mixed).toBeUndefined();
We can use these matchers in our test cases like this:
it('Test case description', function() {
var status = true;
expect(status).toBeTrue(); // This will pass
expect(status).toBeFalse(); // this will fail
});
Not only that, but we can also create our own custom matcher and publish it in the community so that other users can also use it. We can write simple functions that will work as matchers.
Arrays:
expect(array).toBeArray();
expect(array).toBeArrayOfNumbers();
expect(array).toBeEmptyArray();
Booleans:
expect(boolean).toBeBoolean();
expect(boolean).toBeFalse();
expect(boolean).toBeTrue();
Mix:
expect(instance).toBe(instance);
expect(number).toBeGreaterThan(number);
expect(number).toBeLessThan(number);
expect(mixed).toBeNull();
expect(mixed).toBeUndefined();
We can use these matchers in our test cases like this:
it('Test case description', function() {
var status = true;
expect(status).toBeTrue(); // This will pass
expect(status).toBeFalse(); // this will fail
});
Not only that, but we can also create our own custom matcher and publish it in the community so that other users can also use it. We can write simple functions that will work as matchers.
Let’s see, how we can do this:
describe('custom matchers demo', function() {
beforeEach(function() {
// register these matchers before each test cases. Once a custom matcher is registered with Jasmine, it is available on any test case.
jasmine.addMatchers({
toBeValidAge: function() {
return {
compare: function(actual, expected) {
//compare function that takes an actual value and expected value.
// expect(10).matcher(20); actual will be 10 and expected will be 20.
var result = {};
result.pass = (actual >=18 && actual <=35);
// Our custom logic goes here.
result.message = actual + ' is not valid age for this job';
// This will be shown when test get failed
return result;
//The compare function must return a result object with:
// 1. A 'pass' property that is a boolean result of the matcher
// 2. A 'message' property that is a string to show details when test get failed.
}
};
}
});
});
// First test
it('age should be valid for this job', function() {
var myAge = 23;
expect(myAge).toBeValidAge();
// return true if test will pass
});
// Second test
it('age should be valid for this job', function() {
var yourAge = 15;
expect(yourAge).toBeValidAge();
// return false if test will fail
});
});
at line 13 we have customized our error messages to display the following message: ‘age’ is not a valid age for this job.
This happens because the second test fails as the passed age ’15’ is not between ’18’ and ’35’ in the above example.
describe('custom matchers demo', function() {
beforeEach(function() {
// register these matchers before each test cases. Once a custom matcher is registered with Jasmine, it is available on any test case.
jasmine.addMatchers({
toBeValidAge: function() {
return {
compare: function(actual, expected) {
//compare function that takes an actual value and expected value.
// expect(10).matcher(20); actual will be 10 and expected will be 20.
var result = {};
result.pass = (actual >=18 && actual <=35);
// Our custom logic goes here.
result.message = actual + ' is not valid age for this job';
// This will be shown when test get failed
return result;
//The compare function must return a result object with:
// 1. A 'pass' property that is a boolean result of the matcher
// 2. A 'message' property that is a string to show details when test get failed.
}
};
}
});
});
// First test
it('age should be valid for this job', function() {
var myAge = 23;
expect(myAge).toBeValidAge();
// return true if test will pass
});
// Second test
it('age should be valid for this job', function() {
var yourAge = 15;
expect(yourAge).toBeValidAge();
// return false if test will fail
});
});
at line 13 we have customized our error messages to display the following message: ‘age’ is not a valid age for this job.
This happens because the second test fails as the passed age ’15’ is not between ’18’ and ’35’ in the above example.
No comments:
Post a Comment
If you have any doubts or questions, please let us know.