Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 动态覆盖角度服务?_Angularjs_Decorator_Angular Decorator - Fatal编程技术网

Angularjs 动态覆盖角度服务?

Angularjs 动态覆盖角度服务?,angularjs,decorator,angular-decorator,Angularjs,Decorator,Angular Decorator,用例: 我正在使用Geb/Selenium编写系统测试(所以在angular之外)。 我想修改$http以在运行时记录所有请求/响应 这里有一个问题:不涉及源代码 例如,在您急于回答“使用$provide#decorator”之前 这个用例的解决方案意味着在生产代码中添加一个测试挂钩。。。如果可能的话,这通常是我想要避免的一件坏事 更新:Geb允许您在浏览器窗口中运行Javascript。所以我运行了教程代码来装饰$http。不幸的是,它不起作用,因为很明显,你无法在应用程序加载后重新配置它。

用例:

我正在使用Geb/Selenium编写系统测试(所以在angular之外)。 我想修改$http以在运行时记录所有请求/响应

这里有一个问题:不涉及源代码

例如,在您急于回答“使用$provide#decorator”之前

这个用例的解决方案意味着在生产代码中添加一个测试挂钩。。。如果可能的话,这通常是我想要避免的一件坏事


更新:Geb允许您在浏览器窗口中运行Javascript。所以我运行了教程代码来装饰$http。不幸的是,它不起作用,因为很明显,你无法在应用程序加载后重新配置它。但即使它确实有效,这也带来了另一个有趣的问题——我需要在任何模块有机会使用它之前覆盖$http。

因为装饰$http服务将是最干净的方法,您可以通过使用ng常量和gulp/grunt这样的东西来避免污染生产代码,只为“测试”环境添加装饰代码

请参见此处的相关问答:


如果您倾向于在运行时改变这一点(运行时发生在测试环境中),那么您可能需要“更接近实际情况”并处理XMLHttpRequests:

我宁愿使用拦截器,但它们也必须在运行前配置。不过,你可能会滥用转换器,因为它们可以在运行时添加。re:在任何模块有机会使用它之前进行装饰,这就是配置块的概念,它们将在应用程序引导过程中在应用程序代码执行之前执行是的,我们使用grunt。不,我可能不使用ng常量。但主要思想对我们来说是可行的:创建一个新的grunt任务,用测试版本覆盖应用程序配置文件(我们的应用程序中的app.js)。唯一的缺点是,您现在需要维护两个版本的app.js,因此我们可能仍然需要接触prod代码。但是使用这种技术,prod中的测试钩子是最小的。出于好奇,为什么不能使用ng常量呢?它所做的只是生成一组值/常量(在构建时),这些值/常量可以注入到您的应用程序中?因为不需要接触生产代码。但是在意识到我们必须维护两个版本的app.js之后,添加简单的测试挂钩看起来并不是那么回事bad@UAvalos您不需要“触摸”生产代码。使用gulp/grunt,您可以插入一个角度服务/常量/等,当为测试环境构建时,它会做一些事情(装饰$log),或者当为生产环境构建时,它不会做任何操作——这就是我链接到的策略的美妙之处