模拟角度模型的$ http.put结果 - 单元测试

时间:2015-12-03 14:07:43

标签: javascript angularjs unit-testing jasmine angular-mock

我有这个测试:

测试:

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是真的。

我如何嘲笑这个?

2 个答案:

答案 0 :(得分:0)

使用它的一种方法是使用$httpBackend

您还有一些示例,基本上您在测试控制器中注入了$ httpBackend,并将其映射到请求。您在提供的链接中有一些示例,我认为这是直接的。

Here is a tutorial也有一个plunker链接。

答案 1 :(得分:0)

我明白了!

只是添加了一行Iniciada:true在$ httpBackend.expectPUT

谢谢大家!