我正在开发一个驻留在 Android WebView 中的 Angular 应用程序。为了与我的 Android 应用交互,我在窗口范围内公开了一个对象:
window.MyAndroidApp
其中有如下方法:
window.MyAndroidApp.doStuff();
window.MyAndroidApp.doOtherStuff();
我很困惑如何通过 Angular Controller 与这个对象交互而不直接引用它,以便我可以通过单元测试模拟它?
// How do I define androidFunctions as window.MyAndroidApp so that
// I may mock it for unit testing?
app.controller("MyCtrl", ["$scope", "androidFunctions", function($scope, androidFunctions) {
androidFunctions.doStuff();
androidFunctions.doOtherStuff();
}]);
最佳答案
将其变成一项服务 - 然后您可以以正常方式对其进行模拟。
angular.module('myApp').factory('androidManager', [$window, function ($window) {
return $window.MyAndroidApp;
});
当你把它放在 window 上时,它也会放在 $window 上,因为你甚至可以使用类似 sinon 的方式模拟它。
sinon.mock($window, 'MyAndroidApp', {
doStuff: function () {....},
doOtherStuff: function () {..}
});
关于javascript - 自定义 Angular 窗口依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904291/