Búsqueda de sitios web

javascript - Usando Typescript + módulos ngMock


Estoy tratando de entender Typescript, AngularJS y la parte de ngMock. He visto código para inyectar un módulo al inicio de una prueba unitaria de esta manera.

beforeEach(angular.mock.module("myApp"));

Necesito proporcionar otro servicio para que esto funcione:

beforeEach(module("myApp", function($provide) {
    $provide.value("myService", {
        ...
    });
}));

Pero si lo hiciera

beforeEach(angular.mock.module("myApp", function($provide) {
    $provide.value("myService", {
        ...
    });
}));

El compilador de Typescript se queja de que angular.mock.module solo acepta un argumento. Entonces, en el primer fragmento de código de arriba, ¿qué módulo está usando? Cuando voy a la definición, dice en el angular-mocks.d.ts:

declare var module: (...modules: any[]) => any;

¿Entonces qué está pasando aquí? No estoy seguro de si entiendo la notación en el archivo de definición para saber si angular.mock.module y module se usan de la misma manera. ¿Alguien puede explicármelo?

Respuesta #1

No estoy seguro de si entiendo la notación en el archivo de definición para comprender si angular.mock.module y module se usan de la misma manera. ¿Alguien puede explicármelo?

Hay un error en la definición. Los siguientes dos deberían ser iguales: https://github.com/borisyankov/DefinitelyTyped/blob/master/angularjs/angular-mocks.d.ts

    // global module
    declare var module: (...modules: any[]) => any;

    // from angular.mock.module
    module(...modules: string[]): any;
    module(...modules: Function[]): any;
    module(modules: Object): any;

Si obtienes el archivo de definición más reciente, se ha solucionado: https://github.com/borisyankov/DefinitelyTyped/pull/2564

Hay un lado negativo: En muchos casos las definiciones son incluso mejores que la documentación de la biblioteca de JavaScript.