Javascript 茉莉花-我如何模仿一个最后的电话?
我有一个测试,创建了一个这样的控制器Javascript 茉莉花-我如何模仿一个最后的电话?,javascript,angularjs,jasmine,karma-jasmine,Javascript,Angularjs,Jasmine,Karma Jasmine,我有一个测试,创建了一个这样的控制器 this.createScope = function(scope) { if (scope) { this.scope = scope; } else { this.scope = $rootScope.$new(); } this.controller = $controller("menuController", { "$scope": this.scope, upda
this.createScope = function(scope) {
if (scope) {
this.scope = scope;
} else {
this.scope = $rootScope.$new();
}
this.controller = $controller("menuController", {
"$scope": this.scope,
updateActionList: function() {
return {
finally: function() {}
};
}
});
};
我添加了这部分
updateActionList: function() {
return {
finally: function() {}
};
}
因为当我运行测试时,所有测试都失败了,因为
TypeError: undefined is not an object (evaluating 'updateActionList().finally')
updateActionList()是一个在实际代码中调用的本地函数,如下所示
updateActionList().finally(function() {
//Do stuff
});
updateActionList()返回getThings()的承诺,其中包含.then和.finally块
我只想让最后一个块自行解决,这样测试就可以通过了
或者我还有别的事要做?我不知道为什么finally没有定义 所以这个电话
updateActionList().finally(function() {
//Do stuff
});
从其他函数返回承诺,本质上我的问题是,在updateActionList()mock之前返回承诺的函数需要另一个finally调用
this.getThings = jasmine.createSpy("getThings").and.returnValue({
then: function(cb) {
cb(self.mockPlugins);
return {
finally: function(cb) {
cb();
return {
finally: function(cb) {
cb();
}
};
}
};
}
});
如果您演示了一个示例,说明您的一个测试如何尝试使用
updateActionList()
@miqid它是文件中的一个本地函数,它们不直接调用它,只调用正在测试的文件。@Carson,updateActionList
函数被注入了吗?它是否在控制器的范围内?详细说明它是如何成为“局部函数”的,以及它是如何被调用的。。需要这些详细信息..@tanmay抱歉。它没有被注入,也没有连接到范围。它位于控制器函数内,在其中声明,然后在该函数内调用,后面附加了.finally。当我运行代码时,功能按预期工作。当我测试时,它会抱怨我提供的错误。这让我觉得茉莉花的某些东西没有被恰当地嘲笑。我真的无法发布整个代码本身,但这是否澄清了问题?啊,我意识到我遗漏了谜题的一部分,我误解了updateActionList
返回的承诺来自哪里,需要更新模拟的finally
块,以便也有一个finally
。我用这些细节更新了问题,并给出了答案,以防其他人遇到类似的问题。