Mock Async
How to use
Just mock an asynchronous method with this simple function.
@getJSON = mockAsync$'getJSON'
The first argument here is an object, and the second one is method name. Mocked method API will be returned. Here we've saved reference to it with @getJSON
variable.
Mock API
Than we can make our mocked method to do what we want from it to do.
MockApi.shouldSucceed(callback or value)
Makes mocked method to resolve with specified result by default.
@getJSON = mockAsync$'getJSON' @getJSONshouldSucceed '5'$getJSONdone consolelog result # => 5
You can provide callback, so, result will be calculated, based on callback's returned value.
a = 5b = 3@getJSON = mockAsync$'getJSON' @getJSONshouldSucceed -> a + b$getJSONdone consolelog result # => 8
MockApi.shouldFail(callback or value)
The same as MockApi.shouldSucceed
, but rejects mocked promise.
MockApi.whenCalledWith(arguments...).shouldSucceed(callback or value)
You can make mocked method to return different results based on provided to this method arguments.
@getJSON = mockAsync$'getJSON' @getJSONwhenCalledWithlocationpathnameshouldSucceed html: '<div class="page1"></div>' @getJSONwhenCalledWithlocationpathnamepage: 1shouldSucceed html: '<div class="page1"></div>' @getJSONwhenCalledWithlocationpathnamepage: 2shouldSucceed html: '<div class="page2"></div>' $getJSONlocationpathnamepage: 1done consolelog resulthtml # => '<div class="page1"></div>' $getJSONlocationpathnamepage: 2done consolelog resulthtml # => '<div class="page2"></div>'
You can also chain different mocking rules.
@mockApi = mockAsync$'getJSON' whenCalledWithlocationpathnameshouldSucceedhtml: '<div class="page1"></div>' whenCalledWithlocationpathnamepage: 1shouldSucceedhtml: '<div class="page1"></div>' whenCalledWithlocationpathnamepage: 2shouldSucceedhtml: '<div class="page2"></div>'
MockApi.restore()
Restores mocked method.
initialMethod = $getJSON @getJSON = mockAsync$'getJSON'$getJSON is initialMehod # => false @getJSONrestore$getJSON is initialMethod # => true