Commit 5a06c692 by David Baumgold

Add toBeShown and toBeHiding matchers for Jasmine

To reduce redundancy in tests
parent af51d648
beforeEach ->
@addMatchers
toBeShown: ->
@actual.hasClass("is-shown") and not @actual.hasClass("is-hiding")
toBeHiding: ->
@actual.hasClass("is-hiding") and not @actual.hasClass("is-shown")
describe "CMS.Views.Alert as base class", -> describe "CMS.Views.Alert as base class", ->
tpl = readFixtures('alert.underscore') tpl = readFixtures('alert.underscore')
...@@ -19,7 +26,7 @@ describe "CMS.Views.Alert as base class", -> ...@@ -19,7 +26,7 @@ describe "CMS.Views.Alert as base class", ->
it "renders the template", -> it "renders the template", ->
view = new CMS.Views.Alert({model: @model}) view = new CMS.Views.Alert({model: @model})
expect(view.$(".action-close")).toBeDefined() expect(view.$(".action-close")).toBeDefined()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$el).toContainText(@model.get("title")) expect(view.$el).toContainText(@model.get("title"))
expect(view.$el).toContainText(@model.get("message")) expect(view.$el).toContainText(@model.get("message"))
...@@ -30,8 +37,7 @@ describe "CMS.Views.Alert as base class", -> ...@@ -30,8 +37,7 @@ describe "CMS.Views.Alert as base class", ->
view.$(".action-close").click() view.$(".action-close").click()
expect(CMS.Views.Alert.prototype.hide).toHaveBeenCalled() expect(CMS.Views.Alert.prototype.hide).toHaveBeenCalled()
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
describe "CMS.Views.Prompt", -> describe "CMS.Views.Prompt", ->
tpl = readFixtures('prompt.underscore') tpl = readFixtures('prompt.underscore')
...@@ -114,63 +120,52 @@ describe "CMS.Views.Notification minShown and maxShown", -> ...@@ -114,63 +120,52 @@ describe "CMS.Views.Notification minShown and maxShown", ->
it "a minShown view should not hide too quickly", -> it "a minShown view should not hide too quickly", ->
view = new CMS.Views.Notification({model: @model, minShown: 1000}) view = new CMS.Views.Notification({model: @model, minShown: 1000})
expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled() expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
# call hide() on it, but the minShown should prevent it from hiding right away # call hide() on it, but the minShown should prevent it from hiding right away
view.hide() view.hide()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
# wait for the minShown timeout to expire, and check again # wait for the minShown timeout to expire, and check again
@clock.tick(1001) @clock.tick(1001)
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
it "a maxShown view should hide by itself", -> it "a maxShown view should hide by itself", ->
view = new CMS.Views.Notification({model: @model, maxShown: 1000}) view = new CMS.Views.Notification({model: @model, maxShown: 1000})
expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled() expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
# wait for the maxShown timeout to expire, and check again # wait for the maxShown timeout to expire, and check again
@clock.tick(1001) @clock.tick(1001)
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
it "a minShown view can stay visible longer", -> it "a minShown view can stay visible longer", ->
view = new CMS.Views.Notification({model: @model, minShown: 1000}) view = new CMS.Views.Notification({model: @model, minShown: 1000})
expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled() expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
# wait for the minShown timeout to expire, and check again # wait for the minShown timeout to expire, and check again
@clock.tick(1001) @clock.tick(1001)
expect(CMS.Views.Notification.prototype.hide).not.toHaveBeenCalled() expect(CMS.Views.Notification.prototype.hide).not.toHaveBeenCalled()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
# can now hide immediately # can now hide immediately
view.hide() view.hide()
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
it "a maxShown view can hide early", -> it "a maxShown view can hide early", ->
view = new CMS.Views.Notification({model: @model, maxShown: 1000}) view = new CMS.Views.Notification({model: @model, maxShown: 1000})
expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled() expect(CMS.Views.Notification.prototype.show).toHaveBeenCalled()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
# wait 50 milliseconds, and hide it early # wait 50 milliseconds, and hide it early
@clock.tick(50) @clock.tick(50)
view.hide() view.hide()
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
# wait for timeout to expire, make sure it doesn't do anything weird # wait for timeout to expire, make sure it doesn't do anything weird
@clock.tick(1000) @clock.tick(1000)
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
it "a view can have both maxShown and minShown", -> it "a view can have both maxShown and minShown", ->
view = new CMS.Views.Notification({model: @model, minShown: 1000, maxShown: 2000}) view = new CMS.Views.Notification({model: @model, minShown: 1000, maxShown: 2000})
...@@ -178,17 +173,13 @@ describe "CMS.Views.Notification minShown and maxShown", -> ...@@ -178,17 +173,13 @@ describe "CMS.Views.Notification minShown and maxShown", ->
# can't hide early # can't hide early
@clock.tick(50) @clock.tick(50)
view.hide() view.hide()
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
@clock.tick(1000) @clock.tick(1000)
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
# show it again, and let it hide automatically # show it again, and let it hide automatically
view.show() view.show()
@clock.tick(1050) @clock.tick(1050)
expect(view.$('.wrapper')).toHaveClass("is-shown") expect(view.$('.wrapper')).toBeShown()
expect(view.$('.wrapper')).not.toHaveClass("is-hiding")
@clock.tick(1000) @clock.tick(1000)
expect(view.$('.wrapper')).not.toHaveClass("is-shown") expect(view.$('.wrapper')).toBeHiding()
expect(view.$('.wrapper')).toHaveClass("is-hiding")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment