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? });
You can log a message when the function is called using: Debug. Log("Function called!"); You can store a bool that starts as false and set it to true when you enter the function. You can then check this bool elsewhere in code to tell whether your function has been called.
If your function is supposed to assert something and raise an error, give it wrong information and check if it does raise the right error. If your function takes an object and modifies it, test if the new state of your object is as expected.
Use the not
operator:
expect(controller.bar).not.toHaveBeenCalled();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With