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

Antworten:


166

Verwenden notBetreiber:

expect(controller.bar).not.toHaveBeenCalled();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.