javascript - 自定义 Angular 窗口依赖项

标签 javascript android angularjs unit-testing

我正在开发一个驻留在 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/

相关文章:

java - 具有 RSA 签名的 SHA256 在各种 Android 设备上返回不同的输出

java - 使用 eclipse 配置 mockito 时出现问题。给出错误 : java. lang.verifyError

android - 从适配器类启动 FragmentActivity

javascript - 半正矢公式 - 结果过高

javascript - 允许在客户端上编写的 JavaScript 在服务器上执行的最安全方法是什么?

javascript - 使用单页应用程序(Angular)在上下文结帐中使用 PayPal

javascript - 提交后重置 SELECT

javascript - PHP 或 jQuery 输入更改文本

javascript - 将 PHP 脚本返回的 HTML 表转换为 Ionic 框架的 ion-list 格式

javascript - 如何在新字段出现时立即将焦点传递给它( Angular 1.4)?