124

I'm testing router and have two functions, and I need to test if first function was called and second was not. There is method toHaveBeenCalled but there is no method to test if function was not called. How can I test that?

I have code like this:

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?
});
Liam
  • 25,247
  • 27
  • 110
  • 174
jcubic
  • 56,835
  • 46
  • 206
  • 357

1 Answers1

225

Use the not operator:

expect(controller.bar).not.toHaveBeenCalled();
Richard Fearn
  • 24,169
  • 6
  • 56
  • 55
griffon vulture
  • 6,246
  • 6
  • 35
  • 56