我正在寻找对 firebase 数据库的 spy 调用。我有一个包含 firebase 调用的 FireFunc 文件。但是,当我转到spyOn 检查方法时,它返回常规结果。这是怎么回事?
var FireFunc = require("../js/services-fb-functions.js");
describe('Firebase Testing Suite', function() {
var firebase;
var testPath;
var testResult = {};
beforeAll(function() {
var firebaseFunctions = ['check']
firebase = jasmine.createSpyObj('firebase', firebaseFunctions)
firebase.check.and.callFake(function() {
return 2
});
});
describe('check', function() {
it('is working?', function() {
var x = FireFunc.zset()
expect(x).toBe(3); // THIS IS RETURNING 1... which means the spyOn doesn't work for me !
});
});
这是我的代码(js/services-fb-functions.js)
var firebase = {};
firebase.check = function() {
return 1;
}
module.exports = {
zset: function() {
return firebase.check();
}
}
最佳答案
问题是您尚未向测试对象提供 firebase
对象的模拟版本。 js/services-fb-functions.js 中存在的 firebase
对象纯粹是内部的,不会以任何方式公开用于测试。好的做法通常是使用 dependency injection用于提供您希望在测试期间模拟的内部对象。我已经稍微调整了您的代码以与 JSFiddle 和 Jasmine 1.3 一起使用,所以请原谅我有限的 JS 技能(肯定有更优雅的方式来公开内部对象),但是这个 JSFiddle 应该证明我的观点:Simple Jasmine example using spies
关于javascript - 使用 Jasmine 模拟 firebase 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37825370/