Wie kann ich testen, ob eine Funktion nicht aufgerufen wurde?

88

Ich teste den Router und habe zwei Funktionen. Ich muss testen, ob die erste Funktion aufgerufen wurde und die zweite nicht. Es gibt eine Methode, toHaveBeenCalledaber es gibt keine Methode, um zu testen, ob die Funktion nicht aufgerufen wurde. Wie kann ich das testen?

Ich habe folgenden Code:

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?
});
jcubic
quelle

Antworten:

166

Verwenden notBetreiber:

expect(controller.bar).not.toHaveBeenCalled();
Gänsegeier
quelle