Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
180
rated 0 times [  186] [ 6]  / answers: 1 / hits: 37686  / 8 Years ago, tue, september 20, 2016, 12:00:00

JS



var link = this.notificationDiv.getElementsByTagName('a')[0];

link.addEventListener('click', function (evt){
evt.preventDefault();
visitDestination(next);
}, false);
}

var visitDestination = function(next){
window.open(next)
}


Spec



  var next = http://www.example.com

it( 'should test window open event', function() {

var spyEvent = spyOnEvent('#link', 'click' ).andCallFake(visitDestination(next));;
$('#link')[0].click();
expect( 'click' ).toHaveBeenTriggeredOn( '#link' );
expect( spyEvent ).toHaveBeenTriggered();

expect(window.open).toBeDefined();
expect(window.open).toBe('http://www.example.com');
});


How to write the spec to test for when link is clicked it calls visitDestination and to ensures window.open == next? When I try to run the spec it opens the new window.


More From » jasmine

 Answers
29

So, window.open is a method provided by the browser. I don't believe it resets the value of itself. So this:



expect(window.open).toBe('http://www.example.com');  


... is going to fail no matter what.



What you want is to create a mock of the window.open method:



spyOn(window, 'open')


This will allow you to track when it has been run. It will also prevent the actual window.open function from running. So a new window will not open when you run the test.



Next you should test that the window.open method was run:



expect(window.open).toHaveBeenCalledWith(next)


Edit: More detail. If you want to test that visitDestination has been run then you would do:



spyOn(window, 'visitDestination').and.callThrough()

...

expect(window.visitDestination).toHaveBeenCalled()


The .and.callThrough() is really important here. If you don't use it then the normal visitDestination will be replace with a dummy/mock function which does nothing.


[#60662] Saturday, September 17, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jazminuniquer

Total Points: 63
Total Questions: 121
Total Answers: 96

Location: Cambodia
Member since Thu, May 21, 2020
4 Years ago
;