单元测试AngularJS服务

山姆

我试图弄清楚如何测试依赖于的AngularJS服务$http

当使用$httpBackend嘲笑说AJAX后(whenPOST),并发布你的对象确定响应?

这是我的服务和测试,例如:

(function () {
    "use strict"

    var app = angular.module('cs');

    app.service('PlateCheckService', ['$http', function ($http) {
        return {
            checkPlate: function (plateNumber) {
                return $http.post('PlateCheck/Index', {
                    plateNumber: plateNumber
                }).then(function (response) {
                    return {
                        message: response.data.VehicleAtl === null ? 'Clean' : 'Hot',
                        alertClass: response.data.VehicleAtl === null ? 'alert-success' : 'alert-danger'
                    }
                });
            }
        }
    }]);

}());

测验

/// <reference path="../libs/angular-1.0.8/angular.js" />
/// <reference path="../libs/angular-1.0.8/angular-mocks.js" />
/// <reference path="../libs/jasmine-1.3.0/jasmine.js" />
/// <reference path="../app.js" />
/// <reference path="../services/plate-check-service.js" />

describe('Plate Check Service', function () {
    var httpBackend,
        service;

    beforeEach(function () {
        module('cs');

        inject(function ($httpBackend, PlateCheckService) {
            httpBackend = $httpBackend;
            httpBackend.whenPOST('PlateCheck/Index', { plateNumber: '123456' }).respond({
                response: {
                    message: 'Clean',
                    alertClass: 'alert-success'
                }
            });
            httpBackend.whenPOST('PlateCheck/Index', { plateNumber: '123456789' }).respond({
                response: {
                    message: 'Hot',
                    alertClass: 'alert-danger'
                }
            });

            service = PlateCheckService;
        });
    });

    it('Should return a clean plate.', function () {
        var result;

        service.checkPlate('123456').then(function (response) {
            result = response;
        });

        httpBackend.flush();
        expect(result.message).toBe('Clean');
        expect(result.alertClass).toBe('alert-success');
    });
});

测试结果

Test 'Plate Check Service:Should return a clean plate.' failed
    Expected 'Hot' to be 'Clean'.
    Expected 'alert-danger' to be 'alert-success'.
in D:\Code\Scripts\angular\specs\plate-check-service-specs.js (line 35)

0 passed, 1 failed, 1 total (chutzpah).

========== Total Tests: 0 passed, 1 failed, 1 total ==========

好像没有考虑到plateNumber我传递给将其发布到服务器的服务。

我本来希望这个测试能够通过。

这有任何意义吗?

戴文·特里翁(Davin Tryon)

您使用when而不是expect$httpBackend可以在两种不同的模式下运行。文档

有两种方法指定当被测代码发出http请求时,模拟后端应将哪些测试数据作为http响应返回:

  • $ httpBackend.expect-指定请求期望
  • $ httpBackend.when-指定后端定义

请求期望与后端定义请求期望提供了一种对应用程序提出的请求进行断言并定义这些请求的响应的方法。如果未发出预期的请求或发出的请求顺序错误,则测试将失败。

后端定义允许您为应用程序定义一个伪造的后端,该后端不会断言是否发出了特定请求,如果发出了请求,它只会返回经过训练的响应。无论测试期间是否发出请求,测试都会通过。

如果您将设置更改为使用expectPOST,则该模拟将考虑该请求。

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angularjs服务单元测试

来自分类Dev

单元测试AngularJS和PouchDB服务

来自分类Dev

单元测试AngularJS $ window服务

来自分类Dev

对angularJS中的服务进行单元测试

来自分类Dev

AngularJS和PouchDB服务的单元测试

来自分类Dev

AngularJS:带服务的单元测试指令(含服务)

来自分类Dev

在单元测试中模拟AngularJS服务的正确方法?

来自分类Dev

如何模拟$ window进行单元测试AngularJS服务?

来自分类Dev

返回承诺Angularjs Jasmine的单元测试服务

来自分类Dev

AngularJS中的单元测试-模拟服务和承诺

来自分类Dev

AngularJS覆盖(模拟)服务以进行单元测试

来自分类Dev

用于数据库服务的AngularJS单元测试

来自分类Dev

AngularJS覆盖(模拟)服务以进行单元测试

来自分类Dev

分为单独文件的AngularJS单元测试服务

来自分类Dev

AngularJS:带有从服务返回的Promise的单元测试指令

来自分类Dev

返回承诺Angularjs Jasmine的单元测试服务

来自分类Dev

如何对AngularJS服务/工厂进行单元测试

来自分类Dev

AngularJS单元测试:注入式服务未定义

来自分类Dev

服务/工厂的单元测试-AngularJS-茉莉花

来自分类Dev

Angular 单元测试服务

来自分类Dev

单元测试 Angular 服务

来自分类Dev

AngularJS单元测试$ location

来自分类Dev

AngularJS单元测试。HttpBackend

来自分类Dev

AngularJS Karma单元测试

来自分类Dev

使用Promise测试服务的AngularJS / Jasmine单元测试有什么问题?

来自分类Dev

基于angularjs单元测试承诺的服务(SQlite数据库服务)

来自分类Dev

AngularJS-单元测试-使用相同服务的模拟中的原始服务?

来自分类Dev

Angular服务的简单单元测试

来自分类Dev

单元测试Ember服务以获取数据

Related 相关文章

热门标签

归档