我想在我的 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-facebook4
,facebookConnectPlugin
就可以在全局范围内使用。
在单元测试中,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/