Comment se moquer de $champ d'application.variables au jasmin
J'ai la suite de cas de test CompanyCtrlSpec.js
describe('ViewCompanyCtrl', function () {
var $rootScope, scope, $controller , $q ;
beforeEach(angular.mock.module('MyApp'));
beforeEach(inject(function ($rootScope, $controller ) {
scope = $rootScope.$new();
createController = function() {
return $controller('ViewCompanyCtrl', {
$scope: scope,
company : {}
});
};
}));
it('the company type should be equal to an object', function () {
var controller = new createController();
//some assertion
});
});
Suivant est ViewCompanyCtrl.js fichier
angular.module('MyApp').controller('ViewCompanyCtrl',
function ($scope, companyService, $state, meetingService, company, attachmentService) {
'use strict';
$scope.company = company;
$scope.companyInfo = {};
$scope.companyInfo['AName'] = [$scope.company.Address.Street, $scope.company.Address.ZipCode + ' ' + $scope.company.Address.City].join(', ');
//more code
});
Est le suivant app.routes.js fichier où société est en train de se rétablir
.state('company', {
abstract: true,
url: '/company/:companyId',
resolve: {
company: function($q, $stateParams, companyService){
var deferred = $q.defer();
companyService
.getCompany($stateParams.companyId)
.error(function(data, status, headers){
//more code
})
.success(function(data){
deferred.resolve(data);
});
return deferred.promise;
}
},
Mon problème est que j'obtiens l'erreur suivante
TypeError: $scope.company.Address is undefined in C:/Users/MyApp/WebApiRole/app/compan
y/ViewCompanyCtrl.js (line 8)
@C:/Users/MyApp/WebApiRole/app/company/ViewCompanyCtrl.js:8:42
Je suppose que cela se passe parce que je n'avais pas de se moquer de l' portée.de l'entreprise.Adresse dans mon cas de test . Je ne suis pas sûr de la façon de le faire . Reconnaissant si quelqu'un peut m'aider avec ça , ou une méthode pour faire cela ?
OriginalL'auteur Malik | 2015-06-01
Vous devez vous connecter pour publier un commentaire.
Il me semble que la
$scope.company
est le même que lecompany
qui est injecté dans votre contrôleur. Donc, il vous suffit de définir unAddress
sur lecompany
que vous injectez dans votre maquette, comme suit:Si vous souhaitez que les données de l'entreprise à être différents pour chaque test, il suffit de la passer dans votre
createController()
fonction:OriginalL'auteur johnmcase
Essayez d'ajouter du contrôleur à la définition de votre parcours. Un contrôleur n'est pas un singleton, comme les autres services. Elle est généralement liée à un état ou d'une vue.
Encore mieux je voudrais utiliser le
controller As
convention au lieu d'utiliser la portée de votre contrôleur. Ensuite, votre commande sera venu le champ d'application.De côté pour que je vous recommande fortement de jeter un oeil sur John Papa de la norme de codage ou Todd Devise de l'. Les deux sont bons, et recommande d'utiliser cette convention.
OriginalL'auteur Gabriel Kohen