我正在使用Oauth管理AngularJS应用中的会话用户。我的Angular应用程序需要知道有关会话用户的信息,因为它在我的$ resource对象中使用(用于进行REST调用,如GET / user /:user / projects)。我希望这个用户变量是全局的并且同步,因此使用$ resource或$ http进行异步调用以使用户将样板添加到需要此会话用户的代码中(因为它必须等待从服务器返回的用户信息。)
现在我正在使用这个解决问题的脏黑客:在我的index.ejs文件中(注意用户使用ejs呈现服务器端)
<script type="text/javascript">
var session_user = <%- user %>;
</script>
然后我做
$rootScope.user = session_user
问题是当我对控制器进行单元测试时,当然没有定义session_user。
我在想,也许我可以创建一个返回此session_user
变量的服务,因此我可以使用模拟进行测试。还有其他想法吗?这种问题的推荐方法是什么?
答案 0 :(得分:2)
实际上看起来并不是那么脏的黑客。只有当会话用户在没有从服务器重新加载html的情况下进行更改(从而获得新的会话用户)时,这似乎才有问题。
Angular模块有一个constant
函数,我用它来做这类事情:
angular.module("MyModule", [])
.constant("User", window.session_user);
然后您可以将User
视为控制器中的可注射值。