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 https://www.chaijs.com/api/bdd/#method_language-chains[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);
    });
});
----

ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
