1

我正在使用 Oauth 在我的 AngularJS 应用程序中管理会话用户。我的 Angular 应用程序需要知道有关会话用户的信息,因为它在我的 $resource 对象中使用(用于进行 GET /user/:user/projects 之类的 REST 调用)。我希望这个用户变量是全局和同步的,因此使用 $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 回答