1

Oauth を使用して、AngularJS アプリでセッション ユーザーを管理しています。$resource オブジェクトで (GET /user/:user/projects のような REST 呼び出しを行うために) 使用されるため、私の Angular アプリはセッション ユーザーに関する情報を知る必要があります。このユーザー変数をグローバルかつ同期的にしたいので、 $resource または $http で非同期呼び出しを行ってユーザーを取得すると、このセッション ユーザーを必要とするコードに定型文が追加されます (ユーザー情報がサーバーから返されるのを待たなければならないため) )。

現在、私はこの問題を解決するこの汚いハックを使用しています: 私の index.ejs ファイルで (ユーザーが ejs でサーバー側にレンダリングされていることに注意してください)

    <script type="text/javascript">

    var session_user =  <%- user  %>;

    </script>

そして、私はします

$rootScope.user = session_user

問題は、コントローラーを単体テストするときに、もちろん session_user が定義されていないことです。

この変数を返すサービスを作成できるのではないかと考えているsession_userので、モックをテストに使用できます。他のアイデアはありますか?この種の問題に対する推奨されるアプローチは何ですか?

4

1 に答える 1

2

実際にはそれほど汚いハックではないようです。サーバーからhtmlをリロードせずにセッションユーザーが変更される場合にのみ問題があるように思われます(したがって、新しいセッションユーザーを取得します)。

Angular モジュールには、constantこの種の目的で使用する関数があります。

angular.module("MyModule", [])
       .constant("User", window.session_user);

そしてUser、コントローラーで注入可能な値として扱うことができます。

于 2013-02-08T21:00:53.750 に答える