     it 'the returned promise should be rejected', ->
       ended = false
       runs ->
-        promise.call(this)
+        (promise?.call(this) or @promise or @subject)
         .then ->
           expect(false).toBeTruthy()
           ended = true

    it "the returned promise should fail with #{msg}", ->
      ended = false
      runs ->
        promise.call(this)
        .then =>
          block.apply(this, arguments)
          ended = true

      ended = false
      expectedResult = block.call this
      runs ->
        (promise?.call(this) or @promise or @subject)
        .then (result) ->
          expect(result).toEqual(expectedResult)
          ended = true
