当前位置: 首页 > 面试题库 >

如何在AngularJS服务Jasmine测试中模拟$ http?

屠锦
2023-03-14
问题内容

我正在尝试测试AngularJS服务carService,但$httpBackend似乎不起作用。

//carService
angular.module('services').factory('carService',
    function($http) {
        return {
            getTypes: function() {
                return $http.get('/api/cars/types');
            }
        };
    });

谁能解释为什么响应为空?

describe("Services", function () {

    beforeEach(module("app.services"));

    describe("Car services", function () {

        var service, $httpBackend;

        beforeEach(inject(function($injector) {
            service = $injector.get('carService');
            $httpBackend = $injector.get('$httpBackend');

            $httpBackend.when('GET', "/api/cars/types").respond(["Toyota", "Honda", "Tesla"]);
        }));

        afterEach(function() {
            $httpBackend.verifyNoOutstandingExpectation();
            $httpBackend.verifyNoOutstandingRequest();
        });

        it('getTypes - should return 3 car manufacturers', function () {
            service.getTypes().then(function(response) {
                expect(response.length).toEqual(3); //the response is null
            });
            $httpBackend.flush();
        });


    });
});

问题答案:

试试这个:

expect(response.data.length).toEqual(3);

$http请求返回的响应对象在data属性(docs)中具有响应数据。



 类似资料:
  • 问题内容: 我有使用,它可以进行远程调用,并返回promise: 要对我进行单元测试,需要模拟,以便其方法返回promise。这是我的方法: 从上面可以看到,我的模拟的定义取决于,我必须使用来加载。此外,应该在中进行注入模拟,这应该在之前进行。但是,更改模拟后,其值不会更新。 正确的方法是什么? 问题答案: 我不确定为什么您的方法不起作用,但是我通常使用该函数来完成。像这样: 还要记住,您将需要调

  • 问题内容: 我只想在不引导Angular的情况下测试服务。 我看了一些例子和教程,但是我什么也不会去。 我只有三个文件: myService.js:在这里定义AngularJS服务 test_myService.js:在这里定义服务的Jasmine测试。 specRunner.html:一个具有常规茉莉花配置的HTML文件,在其中导入了前两个其他文件以及茉莉花,Angularjs和angular-

  • 问题内容: 我有使用,它可以进行远程调用,并返回promise: 要对我进行单元测试,需要模拟,以便其方法返回promise。这是我的方法: 从上面可以看到,我的模拟的定义取决于,我必须使用进行加载。此外,应该在中进行注入模拟,这应该在之前进行。但是,更改模拟后,其值不会更新。 正确的方法是什么? 问题答案: 我不确定为什么您的方法行不通,但是我通常使用该函数来完成。像这样: 还要记住,您将需要调

  • 问题内容: 我试图在将其他模块作为依赖项的模块中进行单元测试控制器代码的单元化,但是还没有弄清楚如何正确模拟它们。 我正在使用Jasmine Framework,并使用Karma(Testacular)运行测试。 模块代码 规格代码 我得到的错误是Karma是“ no module af.widgets”,因此显然我没有对模块依赖项进行模拟。有什么提示吗? 问题答案: 如果要模拟声明一个或多个服务

  • 在我的服务类中,我有@Autowired HttpServletRequest,并且在我的服务方法中使用相同的对象,但是对于那个服务方法测试类,我不能在我的测试方法中模拟HttpServletRequest对象,请检查下面的代码。我正在获取请求对象的空指针异常

  • 问题内容: 我一直在努力围绕Jasmine 2.0和AngularJS的承诺。我知道: 茉莉花2.0引入的功能,以取代旧的和功能 在触发摘要循环之前,AngularJS Promise 不会解析 如何在Jasmine 2.0中使用新的异步语法测试AngularJS Promise? 问题答案: 致电后: 致电。这将强制进行摘要循环并传播承诺解决方案 致电。告诉Jasmine异步测试已经完成 这是一