Unidade testando uma diretiva que define um controlador no AngularJS

Estou tentando testar uma diretiva usando Karma e Jasmine que faz algumas coisas. Primeiro sendo que ele usa um templateUrl e segundo que define um controlador. Esta pode não ser a terminologia correta, mas cria um controlador em sua declaração. O aplicativo Angular é configurado de forma que cada unidade esteja contida em seu próprio módulo. Por exemplo, todas as diretivas estão incluídas no módulo app.directive, todos os controladores estão contidos no app.controller e todos os serviços estão contidos no app.service etc.

Para complicar ainda mais, o controlador que está sendo definido dentro dessa diretiva tem uma única dependência e contém uma função que faz uma solicitação $ http para definir um valor no $ escopo. Eu sei que eu posso zombar dessa dependência usando $ httpBackend mock para simular a chamada $ http e retornar o objeto adequado para a chamada desta função. Já fiz isso várias vezes nos outros testes unitários que criei e tenho uma boa noção desse conceito.

O código abaixo está escrito em CoffeeScript.

Aqui está minha diretiva:

    angular.module('app.directive')
      .directive 'exampleDirective', [() ->
        restrict: 'A'
        templateUrl: 'partials/view.html'
        scope: true
        controller: ['$scope', 'Service', ($scope, Service) ->
          $scope.model = {}
          $scope.model.value_one = 1

          # Call the dependency
          Service.getValue()
            .success (data) ->
              $scope.model.value_two = data
            .error ->
              $scope.model.value_two = 0
        ]
      ]

Aqui está o serviço de dependência:

    angular.module("app.service")
      .factory 'Service', ['$http', ($http) ->

      getValue: () ->
        options.method = "GET"
        options.url = "example/fetch"

        $http _.defaults(options)

Aqui está a visão:

    <div>
      {{model.value_one}} {{model.value_two}}
    </div>

Eu simplifiquei isso um pouco, já que meu objetivo é apenas entender como conectar isso, eu posso levar a partir daí. A razão pela qual estou estruturando dessa maneira é porque inicialmente não criei isso. Eu estou trabalhando em escrever testes para um projeto existente e não tenho a capacidade de configurá-lo de outra maneira. Eu fiz uma tentativa de escrever o teste, mas não consigo fazer o que eu quero.

Eu quero testar para ver se os valores estão sendo vinculados à visão e, se possível, também testar para ver se o controlador está criando os valores corretamente.

Aqui está o que eu tenho:

    'use strict'

    describe "the exampleDirective Directive", ->

      beforeEach module("app.directive")
      beforeEach module("app/partials/view.html")

      ServiceMock = {
        getValue : () ->

        options.method = "GET"
        options.url = "example/fetch"

        $http _.defaults(options)
      }

     #use the mock instead of the service
     beforeEach module ($provide) ->
       $provide.value "Service", ServiceMock
       return

     $httpBackend = null
     scope = null
     elem = null

     beforeEach inject ($compile, $rootScope, $injector) ->

     # get httpBackend object
     $httpBackend = $injector.get("$httpBackend")
     $httpBackend.whenGET("example/fetch").respond(200, "it works")

     #set up the scope
     scope = $rootScope

     #create and compile directive
     elem = angular.element('<example-directive></example-directive>')
     $compile(elem)(scope)
     scope.$digest()

Eu não sei o quão perto estou ou se isso está correto. Eu quero ser capaz de afirmar que os valores estão vinculados à exibição corretamente. Eu usei o exemplo do Vojtajina para configurar o html2js no meu arquivo karma.js para permitir que eu agarrasse os pontos de vista. Fiz muita pesquisa para encontrar a resposta, mas preciso de ajuda. Espero que um programador mais sábio do que eu possa me apontar na direção certa. Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion