0

我在我的 angularJS 应用程序中使用单元测试。这是我对服务的测试规范:

describe('service', function () {
    var service = {};
    var $httpBackend;

    beforeEach(module('myApp'));
    beforeEach(inject(function (_service_, _$httpBackend_) {
        service = _service_;
        $httpBackend = _$httpBackend_;
    }));

    it('should return test message', function () {
        var response;
        var test = "This is a test";

        $httpBackend.when('GET', '/api/Account/GetTest')
            .respond(200, test);

        service.getTest().then(function (data) {
            response = data;
        });

        expect(response).toEqual(test);
    });
});

而且,这是getTest我的服务中的功能:

var getTest = function () {
    return $http.get("api/Account/GetTest");
};

为什么我会收到以下错误:

错误:意外请求:GET api/Account/GetTest

我还想如果我从规范中的 url 中删除斜杠,错误会变成这样(我不知道为什么):

错误:意外请求:GET /app/views/login.html

4

1 回答 1

0

正确的测试是删除斜线。你得到的错误:

错误:意外请求:GET /app/views/login.html

意味着 Angular 正在尝试意外下载模板。但是,由于您使用的是模拟 $http,因此您会因为意外请求而收到错误消息。

可以添加如下内容:

$httpBackend.when('GET', '/app/views/login.html')
        .respond(200, '');

错误可能会消失,但是:

  1. 这可能会发现其他意外的模板检索
  2. 您的测试显示出意外的行为,因此不太可能小到足以被视为单元测试。

我建议您查看代码并找出加载登录模板的原因(很可能是您无意中加载了指令或组件)。然后您可以确定它是否确实应该成为测试的一部分,或者您是否应该以某种方式将其剔除。

您可能还需要对其他模板执行此操作。

于 2018-03-05T21:05:27.557 回答