1

クライアント側のモデル/リソースを単体テストしたいと考えています。

私は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()

4

1 に答える 1

7

コード:

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

は、coffeescript によって次のように変換されます。

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

また、「モジュール」のコールバック関数はundefinedを返す必要があります。

したがって、コードを次のように変更します。

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

angular-seed jasmine 単体テストを coffeescript に変換する

于 2014-01-13T17:12:32.120 に答える