1

AngularJS で仮想パスをどのように処理しますか?

たとえば、私のテスト環境では、私のベース URL はhttp://localhost/AppName/であり、本番環境ではルートは になりhttp://www.mysite.com/ます。

したがって、開発では、パスが存在しない$http.getと言うhttp://localhost/AppName/Controller/Actionことができますが、製品では、パスが存在する必要がありますhttp://www.mysite.com/Controller/Action

$httpでバックエンドをモックするときの呼び出しや単体テストをどのように処理します$httpBackendか?

(ASP.NET MVCを使用して)これを試しました_Layout.cshtmlが、単体テストでは機能しません:

<script>
    (function () {
        'use strict';

        var app = angular.module('cs').value('urlHelper', {
            getUrl: function (url) {
                var basePath = '@VirtualPathUtility.ToAbsolute("~/")';

                return basePath + url;
            }
        });
    }());
</script>

また試してみました:

(function () {
    'use strict';

    var app = angular.module('cs', []);

    app.run(['$rootScope', function ($rootScope) {
        $rootScope.basePath = '/';
    }]);

}());

prod にデプロイする前にルート パスをどこかに切り替えることを心配する必要がないというアイデアはありますか?

4

1 に答える 1

1

basePath はそれ自体の値であり、urlHelper は basePath に依存するサービスです。

サーバー側で生成されたページでは、サーバーは VirtualPathUtility が見つけた値を挿入し、テストでは、自分に合った値を手動で挿入します。

かみそり:

<script>
    angular.module('cs').value('basePath', '@VirtualPathUtility.ToAbsolute("~/")');
</script>

他の js ファイル:

angular.module('cs').factory('urlHelper', function (basePath) {
    return {
        getUrl: function (url) {
            return basePath + url;
        }
    };
});

テスト:

var urlHelper;

beforeEach(function() {

    module(function($provide) {
        $provide.value('basePath', '/');
    });

    inject(function($injector) {
        urlHelper = $injector.get('urlHelper');
    });
});
于 2013-11-05T00:15:22.157 に答える