The plugin utilities are for those who want to extend Chai with their own set of assertions. The Code Plugin Concepts and Building a Helper guide tutorials are a great reference on how to get started with your own assertions.
Adds a method to an object, such that the method can also be chained.
utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
var obj = utils.flag(this, 'object');
new chai.Assertion(obj).to.be.equal(str);
});
Can also be accessed directly from chai.Assertion
.
chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
The result can then be used as both a method assertion, executing both method
and chainingBehavior
, or as a language chain, which only executes chainingBehavior
.
expect(fooStr).to.be.foo('bar');
expect(fooStr).to.be.foo.equal('foo');
Adds a method to the prototype of an object.
utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
var obj = utils.flag(this, 'object');
new chai.Assertion(obj).to.be.equal(str);
});
Can also be accessed directly from chai.Assertion
.
chai.Assertion.addMethod('foo', fn);
Then can be used as any other assertion.
expect(fooStr).to.be.foo('bar');
Adds a property to the prototype of an object.
utils.addProperty(chai.Assertion.prototype, 'foo', function () {
var obj = utils.flag(this, 'object');
new chai.Assertion(obj).to.be.instanceof(Foo);
});
Can also be accessed directly from chai.Assertion
.
chai.Assertion.addProperty('foo', fn);
Then can be used as any other assertion.
expect(myFoo).to.be.foo;
Ensures that the object being tested against is of a valid type.
utils.expectTypes(this, ['array', 'object', 'string']);
Get or set a flag value on an object. If a value is provided it will be set, else it will return the currently set value or undefined
if the value is not set.
utils.flag(this, 'foo', 'bar'); // setter
utils.flag(this, 'foo'); // getter, returns `bar`
Returns the actual
value for an Assertion
This allows the retrieval of enumerable property names of an object, inherited or not.
Construct the error message based on flags and template tags. Template tags will return a stringified inspection of the object referenced.
Message template tags: - #{this}
current asserted object - #{act}
actual value - #{exp}
expected value
Gets the name of a function, in a cross-browser way.
This allows the retrieval of property info in an object given a string path.
The path info consists of an object with the following properties:
path
undefined
This allows the retrieval of values in an object given a string path.
var obj = {
prop1: {
arr: ['a', 'b', 'c']
, str: 'Hello'
}
, prop2: {
arr: [ { nested: 'Universe' } ]
, str: 'Hello again!'
}
}
The following would be the results.
getPathValue('prop1.str', obj); // Hello
getPathValue('prop1.att[2]', obj); // b
getPathValue('prop2.arr[0].nested', obj); // Universe
This allows the retrieval of property names of an object, enumerable or not, inherited or not.
This allows checking whether an object has named property or numeric array index.
Basically does the same thing as the in
operator but works properly with natives and null/undefined values.
var obj = {
arr: ['a', 'b', 'c']
, str: 'Hello'
}
The following would be the results.
hasProperty('str', obj); // true
hasProperty('constructor', obj); // true
hasProperty('bar', obj); // false
hasProperty('length', obj.str); // true
hasProperty(1, obj.str); // true
hasProperty(5, obj.str); // false
hasProperty('length', obj.arr); // true
hasProperty(2, obj.arr); // true
hasProperty(3, obj.arr); // false
Echos the value of a value. Trys to print the value out in the best way possible given the different types.
Determines if an object or an array matches criteria to be inspected in-line for error messages or should be truncated.
Overwites an already existing chainable method and provides access to the previous function or property. Must return functions to be used for name.
utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',
function (_super) {
}
, function (_super) {
}
);
Can also be accessed directly from chai.Assertion
.
chai.Assertion.overwriteChainableMethod('foo', fn, fn);
Then can be used as any other assertion.
expect(myFoo).to.have.length(3);
expect(myFoo).to.have.length.above(3);
Overwites an already existing method and provides access to previous function. Must return function to be used for name.
utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
return function (str) {
var obj = utils.flag(this, 'object');
if (obj instanceof Foo) {
new chai.Assertion(obj.value).to.equal(str);
} else {
_super.apply(this, arguments);
}
}
});
Can also be accessed directly from chai.Assertion
.
chai.Assertion.overwriteMethod('foo', fn);
Then can be used as any other assertion.
expect(myFoo).to.equal('bar');
Overwites an already existing property getter and provides access to previous value. Must return function to use as getter.
utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
return function () {
var obj = utils.flag(this, 'object');
if (obj instanceof Foo) {
new chai.Assertion(obj.name).to.equal('bar');
} else {
_super.call(this);
}
}
});
Can also be accessed directly from chai.Assertion
.
chai.Assertion.overwriteProperty('foo', fn);
Then can be used as any other assertion.
expect(myFoo).to.be.ok;
Test and object for expression.
Transfer all the flags for assertion
to object
. If includeAll
is set to false
, then the base Chai assertion flags (namely object
, ssfi
, and message
) will not be transferred.
var newAssertion = new Assertion();
utils.transferFlags(assertion, newAssertion);
var anotherAsseriton = new Assertion(myObj);
utils.transferFlags(assertion, anotherAssertion, false);
© 2011–2015 Jake Luer
Licensed under the MIT License.
http://chaijs.com/api/plugins/