javascript - Hur kan jag testa att en funktion inte har blivit kallad?


Jag testar en router och har två funktioner, och jag behöver testa om den första funktionen blev kallad och den andra inte blev det. Det finns en metod toHaveBeenCalled men det finns ingen metod för att testa om en funktion inte blev kallad. Hur kan jag testa det?

Jag har kod som detta:

var args, controller, router;
beforeEach(function() {
    controller = {
        foo: function(name, id) {
            args = [].slice.call(arguments);
        },
        bar: function(name) {
        }
    };
    spyOn(controller, "foo").and.callThrough();
    spyOn(controller, "bar").and.callThrough();
    router = new route();
    router.match('/foo/bar/{{id}}--{{name}}', controller.foo);
    router.match('/foo/baz/{{id}}--{{name}}', controller.bar);
    router.exec('/foo/bar/10--hello');
});
it('foo route shuld be called', function() {
    expect(controller.foo).toHaveBeenCalled();
});
it('bar route shoud not be called', function() {
    // how to test if bar was not called?
});

Svar #1

Använd not-operatorn:

expect(controller.bar).not.toHaveBeenCalled();

Relaterade artiklar