我有这个测试:
测试:
describe('Ao iniciar uma entrevista por id', function () {
it('deve deve utilizar diretorio raiz da aplicacao', inject(function (Questionario) {
expect(Questionario.urlEntrevistaPorId).toContain(raiz);
}));
it('deve atualizar modelo', inject(function (Questionario, $httpBackend) {
var entrevistaNova = { a: 1, b: 2 };
$httpBackend.expectPUT(Questionario.urlEntrevistaPorId, { estudoId: idEstudo, entrevistaId: 666 }).respond({
Entrevista: entrevistaNova,
PaginaAtual: novaPagina
});
Questionario.iniciarEntrevista(666);
spyOn(Questionario, 'setEntrevista');
$httpBackend.flush();
expect(Questionario.setEntrevista).toHaveBeenCalledWith(entrevistaNova, novaPagina);
}));
});
模型角度:
function iniciarEntrevista(id) {
var _this = this;
return $http
.put(this.urlEntrevistaPorId, { estudoId: idEstudo, entrevistaId: id })
.success(function (result) {
if (result.Iniciada) {
_this.setEntrevista(result.Entrevista, result.PaginaAtual);
return true;
}
else {
return false;
}
});
}
调用Questionario.iniciarEntrevista并等待调用setEntrevista。但是由于$ http.put的返回,没有调用此方法。
我需要结果.Iniciada是真的。
我如何嘲笑这个?
答案 0 :(得分:0)
使用它的一种方法是使用$httpBackend。
您还有一些示例,基本上您在测试控制器中注入了$ httpBackend,并将其映射到请求。您在提供的链接中有一些示例,我认为这是直接的。
Here is a tutorial也有一个plunker链接。
答案 1 :(得分:0)
我明白了!
只是添加了一行Iniciada:true在$ httpBackend.expectPUT
谢谢大家!