0

現在、RequireJSでAngularJSを使用しようとしていますが、インジェクションでテストを機能させる方法がわかりません。RequireJSがなければ、

実装

PhoneListCtrl.$inject = ['$scope', '$http'];  
var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { 
    /* constructor body */ 
}];  

テスト

beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
  $httpBackend = _$httpBackend_;
  $httpBackend.expectGET('phones/phones.json').
      respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
  scope = $rootScope.$new();
  ctrl = $controller(PhoneListCtrl, {$scope: scope});
}));  

ただし、RequireJSを使用する場合、コントローラーを次のように定義できます。

demoController.js

define(["dependency"], function() {
    /* constructor body */ 
});

このコントローラーを使用する場合、依存関係の1つとして追加し、変数宣言はありません(「サービス」と呼ぶ方がよいので、例として「コントローラー」を使用します)。

someJS.js

define(["demoController"], function(controller) {
     controller.method();
});

私の質問
RequireJS(AMD)を使用する場合、テストのために$ http、$ scope(または他の何か)をターゲットコントローラーまたはサービスに注入するにはどうすればよいですか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

私は似たようなことをしました:

/*global define, document */

define(['angular', 'jquery'], function (angular, $) {
    'use strict';

    return function () {
        var $injector = angular.bootstrap(document, ['myApp']);
        var $controller = $injector.get('$controller');
        var myController = $controller('myController');
    };
});

angular.bootstrap がサービスを取得できるようにするインジェクターを返すという考え方です。

于 2012-12-21T15:40:47.933 に答える
0

私はついにそれを次のように機能させました。

angular.module('app').controller('MyController', ['$scope', 'dep2', function              ($scope, dep2) {
    $scope.method = function () {//do something};
}]);

このコントローラーは、次のようなテストケースで使用できます。

inject(function($controller, $rootScope, dep2) {
        scope = $rootScope.$new();
        myController = $controller("MyController",
                {
                    $scope : scope,
                    dep2: dep2
                });
);
于 2012-12-31T08:28:05.153 に答える