0

angularjs アプリを開発しており、アプリ構成データを定義しています。コントローラーを単体テストするときに、アプリ構成の単体テストを削除するとエラーが発生し、エラーなしで実行されます。

私のコードはここにあります app.js

var signup = angular.module('Signup', []);
    signup.config("ajaxURL",{"signupSubmit": "/signup/submit","signupCheckEmailAvailability": "/signup/checkemail"});

    signup.factory('SignupService',['$http','ajaxURL',function($http,URL){
        return {
          submit: function(signupData){
                console.log("in submit service--");
                console.log(signupData);
                var promise = $http.post((URL.signupSubmit).toString(), signupData).then(function(response){
                    return response;
                });
                return promise;
          },
          checkEmailAvailability: function(emailData){
              var promise = $http.post((URL.signupCheckEmailAvailability).toString(),emailData).then(function(response){
                  return response;
              });
              return promise;
          }
        };
    }]);

    signup.controller('SignupCtrl',['SignupService', '$scope',function(Signup, $scope){

        $scope.signupPromise;            
        $scope.submitSignupForm = function(signupData){
            $scope.signupPromise = Signup.submit(signupData);
            signupSubmitEvent();
        }

        function signupSubmitEvent(){
            $scope.signupPromise.then(function(response){
                console.log("http response");
            });
        }

    }]);

appSpec.js

'use strict';
describe('signup unit tests', function() {

var signup, scope, $httpBackend, ctrl;
var userData = {"userid":"2","email":"xxxx@sss.com","clientId":"123456789","clientSecret":"a1b2c3d4e5f6","accessToken":"AP16MD3217"};

beforeEach(module('Signup'));

beforeEach(inject(function($injector, _$rootScope_, $controller, _SignupService_){

    $httpBackend = $injector.get('$httpBackend');

    scope = _$rootScope_.$new();
    var Signup = _SignupService_;

    ctrl = $controller('SignupCtrl', {Signup: Signup, $scope: scope});
}));

it("simple testing", function(){
    console.log("in simple test");
    $httpBackend.expectPOST("/signup/submit/", userData).respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
    $httpBackend.flush();
    scope.submitSignupForm(userData);
});

});

構成データを単体テストに追加する方法を教えてください。

4

1 に答える 1

0

アプリの構成セクションを実行せずにサービス/コントローラーをテストする場合は、コントローラーとサービスを別のモジュールに配置する必要があります。例えば:

var signup = angular.module('Signup', ['Signup.services', 'Signup.ctrls']);

signup.config("ajaxURL",{"signupSubmit": "/signup/submit","signupCheckEmailAvailability": "/signup/checkemail"});

var signupServices = angular.module('Signup.services', []);
signupServices.factory('SignupService',['$http','ajaxURL',function($http,URL){
    return {
      ...
    };
}]);

var signupControllers = angular.module('Signup.ctrls', ['Signup.services']);
signupControllers.controller('SignupCtrl',['SignupService', '$scope',function(Signup, $scope){
  ...
}]);

次に、テストで、テストするモジュールをロードするだけです。例えば:

beforeEach(module('Signup.services'));
于 2014-05-27T13:49:27.503 に答える