我试图通过对基本方法执行简单的jasmine测试来增加项目中的代码覆盖率。在我的控制器中,我有这个:
function fetchStates() {
$repository.states().all().then(function(data) {
vm.states = data;
});
}
我正在尝试设置VM。但我绝对没有试过让它开火。我可以模拟一个存储库,这样jasmine就不会抱怨它不存在,但是当我尝试运行controller时。fetchStates();它根本不会到达内部代码行。mock $repository的正确方法是什么?states().all().则它将允许VM。状态=数据?
function GetMockFacRepo() {
var facilityPromise = new Promise((resolve, reject) => {
resolve({ id: 1 });
});
return {
states: function () {
return {
id: 0,
all: function () {
then:
{
return facilityPromise
}
}
}
}
};
}
var repo2 = GetMockFacRepo();
spyOn(repo2.states.all, "then").and.callFake(function () { return 1 });
2条答案
按热度按时间rxztt3cl1#
尝试以下操作:
在Assert
vm.states = data;
之前,您可能还必须等待promise解析。在Angular 2+中,你可以使用fakeAsync/tick
和fixture.whenStable()
。我不知道Angular 1中可以使用什么。lg40wkob2#
它最终成为显式地模拟存储库的组合,创建我自己的promise,而不是使用q,* 和 * 使用async调用控制器构造函数。
回购代码:
测试:
编辑:控制器调用在内部填充states属性的方法,我不必显式调用它来填充属性