angularjs - Jasmine + 使用 Typescript : TypeError: 'undefined' is not an object 进行 Angular 测试

标签 angularjs typescript jasmine karma-jasmine

我正在尝试测试以下服务,但似乎无法匹配模拟响应:

public getCustomerDetails(customerID:string): ng.IPromise<ICustomerDetails> {
    return this.testService.getCustomerDetails(customerID).then((customerResponse:ICustomerResult) => {

        var customer = customerResponse.customers;

        var customerDetailsResult:ICustomerDetails = {
            customerNumber: customer.displayCustomerNumber,
            name: customer.name,
            userId: customer.buId,
            customerType: customer.type,
            address: customer.displayAddress
        };

        return customerDetailsResult;
    });
}

这是 Jasmine 代码:

describe('CustomerService', () => {
    var mockTestService: any = {};
    var $q: ng.IQService;
    var createCustomerDetailsService;
    var customerDetailsService;
    var createResolvedPromise;
    var resolvePromises;

    var serviceResponse = {
        customerNumber: 'string',
        name: 'name',
        userId: 'buId',
        customerType: 'type',
        address: 'displayAddress'
    };

    var rootScope;

    beforeEach(() => {
        module('app.customer');

        inject(( _$q_, $injector) => {
            this.$q = _$q_;
            rootScope = $injector.get('$rootScope');

            createResolvedPromise = (result) => {
                return this.$q.when(result);
            };

            resolvePromises = () => {
                rootScope.$apply();
            };

            createCustomerDetailsService = () => {
                return new app.customer.CustomerService(
                    mockRnsService);
            };
        });

    });


    it('WILL search by customer ID and return a customers details', () => {
        var searchResponsePromise;

        mockTestService.getCustomerDetails = jasmine.createSpy("getCustomerDetails").and.callFake(createResolvedPromise);
        customerDetailsService = createCustomerDetailsService();
        searchResponsePromise = customerDetailsService.getCustomerDetails('12345678');
        resolvePromises();

        expect(searchResponsePromise).toEqual(serviceResponse);
    });

});

我得到的错误是:

TypeError: 'undefined' 不是一个对象(评估 'customer.displayCustomerNumber')

谁能告诉我为什么会出现此错误?谢谢你的帮助。

最佳答案

createResolvedPromise 设置 getCustomerDetails 以返回带有您传入的参数值的 promise - 在本例中为 '12345678'。这意味着 customerResponse 的值为 '12345678'。因此,从 customerResponse.customers 获取值的 customer 是未定义的,因为字符串上没有属性 customers。因此,当您尝试评估 customer.displayCustomerNumber 时会发生错误,因为 customer 未定义。

关于angularjs - Jasmine + 使用 Typescript : TypeError: 'undefined' is not an object 进行 Angular 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32710937/

相关文章:

jquery - 处理 Bootstrap 下拉菜单的 jQueryUI Datepicker 的单击事件

javascript - 使用 bindToController 时,指令的范围变量在构造函数中未定义

angular - 单元测试 Angular 2 服务主题

angularjs - md-tab 导致 $digest 已进行中错误

javascript - 如何使用 Angular 数据表将 "data-title"放入 <td> 而不使用 ng-repeat

javascript - 尽管 async/await,nestJS Mongoose 回调在返回后仍被调用

javascript - Vue 3 - 在用作函数参数时设置组件及其 Prop 的类型

javascript - 如何使用 Jasmine 和 Karma 测试 DOM 和 CSS

node.js - 在 Jasmine 中设置基本身份验证 header 以测试 NodeJS Api

angularjs - 检测 Materializecss 选项卡更改