2013-12-04 2 views
1

Я хочу, чтобы тестировать модели/ресурсы моей клиентской стороны.Mocking Restangular with angularjs jasmine karma

Я использую 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, где он получает объект ретрансляционного провайдера (то есть this.$get = -> ...) и попытался запустить invoke().

ответ

7

Код:

beforeEach module ($provide)-> 
    $provide.value('Restangular', self.restangularMock) 

преобразуется CoffeeScript в

beforeEach(module(function($provide) { 
    return $provide.value('Restangular', self.restangularMock); 
})); 

А функция обратного вызова в 'модуль' должен вернуть неопределенную.

Таким образом, изменение кода:

beforeEach module ($provide)-> 
    $provide.value('Restangular', self.restangularMock) 
    return 

Converting angular-seed jasmine unit tests to coffeescript

+1

Ahh CoffeeScript вы можете быть хитрым парень - работает для меня - спасибо! –

+0

Как бы вы издевались над методом restangular put, поскольку put вызывается на отдельный объект сообщения (message.put())? –

Смежные вопросы