Uwaga: Piszę wszystko coffeescript
Mam kontroler następująco:
angular.module('myApp').controller 'MyController', ($scope, $routeParams, Batch) ->
$scope.$on '$routeChangeSuccess',() ->
Batch.get {batchUuid: $routeParams.batchUuid}, (response) ->
$scope.batch_id = response.id
Kontroler ciągnie w zasobie partii, która jest zdefiniowane następująco:
angular.module('myApp').factory 'Batch', ($resource) ->
$resource '/batches/:batchUuid', {}
mam trasę do tego, co następuje:
$routeProvider.when('/batches/:batchUuid',
{ templateUrl: 'batches-processing.html', controller: 'MyController' })
Więc:
- odwiedzić trasę /partie/22
- Wykorzystuje MyController
- To wyzwala $ routeChangeSuccess
- wywołuje ona dostać się na czarownicę zasobów Batch the batchUuid from the route
- To z powrotem odpowiedź json i assi GNS id do $ scope.batch_id
Teraz chcę przetestować więc mam badanej jednostki następująco:
describe 'Controllers', ->
beforeEach module 'myApp'
describe 'MyController', ->
scope = {}
ctrl= {}
beforeEach inject ($rootScope, $controller, Batch, $httpBackend) ->
scope = $rootScope.$new()
ctrl = $controller('MyController', ($scope: scope))
#I imagine I need to use either my injected Batch resource or the httpBackend to fake/expect the ajax call here
it "Gets data from the resource and assigns it to scope",() ->
#How on earth do I test this
Widziałem ludzi używających $ httpBackend.expect ('/ końcowy. json '). reply ({id: 1}) itp., ale nie mogę tego zrobić. Mój adres URL zasobu opiera się na batchUuid z trasy. Jak mogę zasymulować/sfałszować/wdrożyć test symulujący zmianę trasy, aktywować $ routeChangeSuccess, przekazać routeParameter do zasobu, uzyskać dostęp do zasobu i przetestować wynik?
Wyciągam włosy z tego, a kanciaste dokumenty nie wydają się tego ukrywać.
Dzięki!
Legendary kolego. Po prostu legendarny. –
minus jeden za coffeescript? gwizd. Pytanie samo w coffeescript –