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"
}
}
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"
]
}
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.