Skip to content
This repository has been archived by the owner on Jul 26, 2023. It is now read-only.

Commit

Permalink
Merge pull request #232 from xzyfer/feat/event-calls
Browse files Browse the repository at this point in the history
Added the call count functions found in jasmine
  • Loading branch information
Travis Jeffery committed Feb 15, 2015
2 parents bba4212 + a8e8d23 commit cd112dd
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 5 deletions.
25 changes: 21 additions & 4 deletions lib/jasmine-jquery.js
Expand Up @@ -284,7 +284,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
jasmine.jQuery.events = {
spyOn: function (selector, eventName) {
var handler = function (e) {
data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = jasmine.util.argsToArray(arguments)
var calls = (typeof data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] !== 'undefined') ? data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].calls : 0
data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = {
args: jasmine.util.argsToArray(arguments),
calls: ++calls
}
}

$(selector).on(eventName, handler)
Expand All @@ -296,12 +300,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
handler: handler,
reset: function (){
delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
},
calls: {
count: function () {
return data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] ?
data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].calls : 0;
},
any: function () {
return data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] ?
!!data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].calls : false;
}
}
}
},

args: function (selector, eventName) {
var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].args

if (!actualArgs) {
throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent."
Expand All @@ -324,15 +338,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
},

wasPrevented: function (selector, eventName) {
var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
var spiedEvent = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
, args = (jasmine.util.isUndefined(spiedEvent)) ? {} : spiedEvent.args
, e = args ? args[0] : undefined

return e && e.isDefaultPrevented()
},

wasStopped: function (selector, eventName) {
var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
var spiedEvent = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
, args = (jasmine.util.isUndefined(spiedEvent)) ? {} : spiedEvent.args
, e = args ? args[0] : undefined

return e && e.isPropagationStopped()
},

Expand Down
30 changes: 29 additions & 1 deletion spec/suites/jasmine-jquery-spec.js
Expand Up @@ -1032,9 +1032,10 @@ describe("jQuery matcher", function () {
})

describe('toHaveBeenTriggeredOn', function () {
var spyEvents = {}
beforeEach(function () {
setFixtures(sandbox().html('<a id="clickme">Click Me</a> <a id="otherlink">Other Link</a>'))
spyOnEvent($('#clickme'), 'click')
spyEvents['#clickme'] = spyOnEvent($('#clickme'), 'click')
spyOnEvent(document, 'click')
spyOnEvent($('#otherlink'), 'click')
})
Expand Down Expand Up @@ -1067,6 +1068,20 @@ describe("jQuery matcher", function () {
expect('click').not.toHaveBeenTriggeredOn($('#clickme'))
expect('click').not.toHaveBeenTriggeredOn('#clickme')
})

it('should pass if the event call count is incremented', function () {
expect(spyEvents['#clickme'].calls.any()).toEqual(false);
expect(spyEvents['#clickme'].calls.count()).toEqual(0);
$('#clickme').click()
expect('click').toHaveBeenTriggeredOn($('#clickme'))
expect('click').toHaveBeenTriggeredOn('#clickme')
expect(spyEvents['#clickme'].calls.count()).toEqual(1);
expect(spyEvents['#clickme'].calls.any()).toEqual(true);
$('#clickme').click()
$('#clickme').click()
expect(spyEvents['#clickme'].calls.count()).toEqual(3);
expect(spyEvents['#clickme'].calls.any()).toEqual(true);
})
})

describe('toHaveBeenTriggeredOnAndWith', function () {
Expand Down Expand Up @@ -1164,6 +1179,19 @@ describe("jQuery matcher", function () {
expect('click').not.toHaveBeenTriggeredOn('#clickme')
expect(spyEvents['#clickme']).not.toHaveBeenTriggered()
})

it('should pass if the event call count is incremented', function () {
expect(spyEvents['#clickme'].calls.any()).toEqual(false);
expect(spyEvents['#clickme'].calls.count()).toEqual(0);
$('#clickme').click()
expect(spyEvents['#clickme']).toHaveBeenTriggered()
expect(spyEvents['#clickme'].calls.count()).toEqual(1);
expect(spyEvents['#clickme'].calls.any()).toEqual(true);
$('#clickme').click()
$('#clickme').click()
expect(spyEvents['#clickme'].calls.count()).toEqual(3);
expect(spyEvents['#clickme'].calls.any()).toEqual(true);
})
})

describe('toHaveBeenPreventedOn', function () {
Expand Down

0 comments on commit cd112dd

Please sign in to comment.