web-dev-qa-db-fra.com

Angular 4 CLI ne peut pas trouver le nom 'jasmine'

J'utilise la CLI Angular 4 (v.1.0.0) et pour gérer les tests, j'ai créé des simulations qui utilisent du jasmin pour créer un espion. Dans IDE tout semble correct, mais dans le terminal, je reçois une erreur qui dit "Impossible de trouver le nom 'jasmine'".

Au début, je pensais que le problème était que le jasmin n'était pas ajouté aux saisies mais je peux voir que package.json inclut l'importation pour le type de jasmin def, donc je ne suis pas sûr de ce qui manque.

mocks.ts

export class MockAuthService {
  public login: Function = jasmine.createSpy('login');
}

export class MockHttpService {
  public delete: Function = jasmine.createSpy('delete');
  public get: Function = jasmine.createSpy('get');
  public post: Function = jasmine.createSpy('post');
  public put: Function = jasmine.createSpy('put');
}

l'exécution de ng serve renvoie les messages d'erreur suivants dans le terminal.

ERREUR dans C: /Users/efarley/Desktop/repos/prod/src/app/mocks/mocks.ts (2,23): Impossible de trouver le nom 'jasmine'. C: /Users/efarley/Desktop/repos/prod/src/app/mocks/mocks.ts (6,24): impossible de trouver le nom 'jasmine'. C: /Users/efarley/Desktop/repos/prod/src/app/mocks/mocks.ts (7,21): impossible de trouver le nom 'jasmine'. C: /Users/efarley/Desktop/repos/prod/src/app/mocks/mocks.ts (8,22): Impossible de trouver le nom 'jasmine'. C: /Users/efarley/Desktop/repos/prod/src/app/mocks/mocks.ts (9,21): Impossible de trouver le nom 'jasmine'. webpack: échec de compilation.

tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2016",
      "dom"
    ]
  }
}

tsconfig.spec.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "module": "commonjs",
    "target": "es5",
    "baseUrl": "",
    "types": [
      "jasmine",
      "node"
    ]
  },
  "files": [
    "test.ts"
  ],
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ]
}

tsconfig.app.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "module": "es2015",
    "baseUrl": "",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

package.json

{
  "name": "prod",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^4.0.2",
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/flex-layout": "^2.0.0-beta.8",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/material": "^2.0.0-beta.3",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "core-js": "^2.4.1",
    "rxjs": "^5.1.0",
    "zone.js": "^0.8.4"
  },
  "devDependencies": {
    "@angular/cli": "1.0.0",
    "@angular/compiler-cli": "^4.0.0",
    "@types/jasmine": "2.5.38",
    "@types/node": "~6.0.60",
    "codelyzer": "~2.0.0",
    "jasmine-core": "~2.5.2",
    "jasmine-spec-reporter": "~3.2.0",
    "karma": "~1.4.1",
    "karma-chrome-launcher": "~2.0.0",
    "karma-cli": "~1.0.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-coverage-istanbul-reporter": "^0.2.0",
    "protractor": "~5.1.0",
    "ts-node": "~2.0.0",
    "tslint": "~4.5.0",
    "TypeScript": "~2.2.0"
  }
}
14
efarley

Vous obtenez l'erreur parce que TypeScript essaie d'inclure la maquette dans la génération app et l'application (à juste titre) ne connaît pas Jasmine.

Exclure la maquette de la compilation de votre application en l'ajoutant au tableau exclude dans tsconfig.app.json:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "module": "es2015",
    "baseUrl": "",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts",
    "**/*.mock.ts"
  ]
}
35
superluminary

Je ne sais pas si vous devriez créer des spys de jasmin de cette façon, mais peu importe:

Le problème vient du nom de votre fichier

remarquer: tsconfig.spec.json a: "include": ["**/*.spec.ts","**/*.d.ts"]

et votre nom de fichier est mocks.ts.

modifiez le nom du fichier en mocks.spec.ts

ou ajoutez "**/*.mock.ts" et renommer quelque chose comme service.mock.ts

J'espère que cela t'aides.

2
Ahmed Musallam