It is very easy to write incomplete assertions when using some test frameworks. This rule enforces complete Chai assertions in the following
cases:
- when
assert.fail
, expect.fail
or should.fail
are present but not called.
- when an
expect(...)
or should
assertion is not followed by an assertion method, such as equal
.
- when an
expect
or should
assertion ends with a chainable getters, such as .that
, or a modifier, such as
.deep
.
- when an
expect
or should
assertion function, such as .throw
, is not called.
In such cases, what is intended to be a test doesn’t actually verify anything
Noncompliant Code Example
const assert = require('chai').assert;
const expect = require('chai').expect;
describe("incomplete assertions", function() {
const value = 42;
it("uses chai 'assert'", function() {
assert.fail; // Noncompliant
});
it("uses chai 'expect'", function() {
expect(1 == 1); // Noncompliant
expect(value.toString).to.throw; // Noncompliant
});
});
Compliant Solution
const assert = require('chai').assert;
const expect = require('chai').expect;
describe("incomplete assertions", function() {
const value = 42;
it("uses chai 'assert'", function() {
assert.fail();
});
it("uses chai 'expect'", function() {
expect(1).to.equal(1);
expect(value.toString).throw(TypeError);
});
});