用例:
我正在使用Geb / Selenium编写系统测试(因此在angular之外)。 我想装饰$ http以在运行时记录所有请求/响应。
这里有一个问题:没有触及源代码。
在您急于回答“使用$ provide#decorator”之前,例如,
http://blog.xebia.com/2014/08/08/extending-angularjs-services-with-the-decorate-method/
此用例的解决方案 意味着将测试挂钩添加到生产代码中......如果可能的话,这通常是我想要避免的坏事。
更新:Geb允许您在浏览器窗口中运行Javascript。所以只是为了它,我运行教程代码来装饰$ http。不幸的是,它没有用,因为显然你无法在加载后重新配置应用程序。但即使它确实有效,这也会带来另一个有趣的观点 - 我需要在任何模块有机会使用之前覆盖$ http 。
答案 0 :(得分:0)
由于装饰$ http服务是最干净的方法,因此您可以通过使用ng-constants和gulp / grunt之类的东西来避免污染生产代码,只为“测试”环境添加装饰代码。
请参阅此处的相关问答:How do I configure different environments in Angular.js?
如果您倾向于在运行时更改它(运行时在测试环境中进行),您可能需要“更接近金属”并处理XMLHttpRequests:Add a "hook" to all AJAX requests on a page