クライアント側のモデル/リソースを単体テストしたいと考えています。
私はrestangular
それをモックアウトして、正しい呼び出しが行われたかどうかを確認/スパイしたいと考えていますrestangular
。
私のリソース:
module = angular.module 'myapp.core.resources'
class Messaging
constructor: (@restangular) ->
@resource = @restangular.all('messaging')
send_to: (user, message) =>
@resource.post(to: user.id, message: message)
module.service '$messaging', ['Restangular', Messaging]
私のモック:
# Globally available
@restangularMock =
one: jasmine.createSpy()
all: (resource) ->
post: jasmine.createSpy('post'),
get: jasmine.createSpy('get')
私のテスト:
# Set the global config before end of configuration lifecycle
angular.module('myapp.core.config').config (GlobalConfig) ->
GlobalConfig.setBaseConfig
api:
baseUri: '/api',
csrfTokens: {'messaging': 'abcdef'}
describe "Resources", ->
beforeEach module ($provide)->
$provide.value('Restangular', self.restangularMock)
beforeEach module("myapp.core.resources")
describe "#Messaging", ->
messaging = null
beforeEach inject ($messaging) ->
messaging = $messaging
it "sends a message to the given user id", ->
messaging.send_to('test', 'message!')
expect(self.restangularMock.all('messaging').post).toHaveBeenCalledWith(to: 'test', message: 'message!')
私が得るエラー:
Error: [ng:areq] Argument 'fn' is not a function, got Object
失敗は、restangular
モジュールの読み込みに起因するように見えます。そこで、モジュールは、restangular プロバイダー オブジェクト (つまりthis.$get = -> ...
) を取得し、実行しようとしましたinvoke()
。