【发布时间】:2015-12-03 14:07:43
【问题描述】:
我有这个测试:
测试:
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 的返回,这个方法没有被调用。
我需要 result.Iniciada 是真的。
如何模拟这个?
【问题讨论】:
-
尝试将 200 代码添加到响应中。像这样:.respond(200,{})
-
我发现使用
spyOn($http, 'post').and.returnValue($q.when(myData));模拟 $http 对象更容易 -
看起来您在响应处理程序中的
if (result.Iniciad)条件可能是问题所在。收到响应时,您正在检查此属性,但您似乎没有在模拟响应数据中传递该属性。
标签: javascript angularjs unit-testing jasmine angular-mock