javascript - 在单元测试中模拟 Cordova 插件

标签 javascript angularjs cordova unit-testing jasmine

我想在我的 Controller 中测试一段代码:

$scope.fbLogin = function() {
  console.log('Start FB login');
  facebookConnectPlugin.login(["public_profile", "email", "user_friends"], FacebookServices.fbLoginSuccess, FacebookServices.fbLoginFailure);
};

facebookConnectPlugin 不需要注入(inject) Controller 。只要我执行 cordova plugin add cordova-plugin-facebook4facebookConnectPlugin 就可以在全局范围内使用。

在单元测试中,facebookConnectPlugin 不可用,因为不需要注入(inject),$provide.value() 方法不执行不再魔法了。

这是错误(提示源代码和规范):

ReferenceError: facebookConnectPlugin is not defined at Scope.$scope.fbLogin (/app/signup-and-login/controllers.js:9:6120)

ReferenceError: facebookConnectPlugin is not defined at Object. (/app/signup-and-login/signup-specs.js:93:9)

有人可以阐明我可以模拟插件并在单元测试环境中提供它吗?

最佳答案

遇到了同样的问题。解决了这个问题,包括 karma.config.js 文件数组中的 globals.js 文件。然后在 globals.js 中我创建了一个全局的 facebookConenctPlugin。它以这样的方式结束:

globals.js

facebookConnectPlugin = {
  login: function(){...},
  logout: function(){...}
};

并且在 karma.config.js

// Karma configuration
module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],

    files: [
      'www/assets/lib/angular/angular.js',
      'node_modules/jquery/dist/jquery.min.js',
      'node_modules/jasmine-jquery/lib/jasmine-jquery.js',
      'node_modules/angular-mocks/angular-mocks.js',
      ...
      //// MOCK GLOBALS ///////////////////
      'test/mocks/globals.js',
      /////////////////////////////////////
      ...
    ],
    ...
};

关于javascript - 在单元测试中模拟 Cordova 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119145/

相关文章:

javascript - 使用 json 数据异步填充 AngularJS ngTable

javascript - 从 api 中解析 php 中的 json 数组

ios - 签署 PhoneGap 构建应用程序以进行分发。无法下载

node.js - "npm install -g cordova"导致 Windows 7 蓝屏崩溃

javascript - 如何删除数组数组中的第一个索引?

javascript - ng 嵌入为 : element vs attribute

javascript - 注释掉 <script> 结束标记。语法好不好?

android - 有没有办法告诉 WebStorm EAP 在哪里可以找到 android_home?

javascript - NodeJS中将JSON转换为TXT格式

javascript - 根据线条( Canvas )的位置添加文本标签