בדיקות יחידה ב-Angular 2: לא ניתן למצוא את השם 'describe'


אני עוקב אחרי המדריך הזה מ-angular.io

כמו שהם אמרו, יצרתי את הקובץ hero.spec.ts כדי ליצור בדיקות יחידה:

import { Hero } from './hero';
describe('Hero', () => {
  it('has name', () => {
    let hero: Hero = {id: 1, name: 'Super Cat'};
    expect(hero.name).toEqual('Super Cat');
  });
  it('has id', () => {
    let hero: Hero = {id: 1, name: 'Super Cat'};
    expect(hero.id).toEqual(1);
  });
});

בדיקות יחידה עובדות כקסם. הבעיה היא: אני רואה כמה שגיאות, שהוזכרו במדריך:

העורך שלנו והקומפיילר עשויים להתלונן שהם לא יודעים מהו it ומהו expect משום שחסרות להם קבצי ההקלדה שמתארים את Jasmine. אנו יכולים להתעלם מהתלונות המטרידות הללו לעת עתה מאחר שהן חסרות נזק.

והם אכן התעלמו מהם. למרות שהשגיאות האלה חסרות נזק, זה לא נראה טוב בקונסולת הפלט שלי כשאני מקבל הרבה מהן.

דוגמה למה שאני מקבל:

לא ניתן למצוא את השם 'describe'.

לא ניתן למצוא את השם 'it'.

לא ניתן למצוא את השם 'expect'.

מה אני יכול לעשות כדי לתקן את זה?

תשובה #1

אני מקווה שהתקנת -

npm install --save-dev @types/jasmine

לאחר מכן הוסף את הייבוא הבא בראש הקובץ hero.spec.ts -

import 'jasmine';

זה אמור לפתור את הבעיה.

תשובה #2

עם [email או אחר תוכל להתקין סוגים עם:

npm install -D @types/jasmine

לאחר מכן ייבא את הסוגים אוטומטית באמצעות האפשרות types ב-tsconfig.json:

"types": ["jasmine"],

פתרון זה אינו דורש import {} from 'jasmine'; בכל קובץ ספציפי.

תשובה #3

npm install @types/jasmine

כמו שצוין בכמה תגובות, ה-"types": ["jasmine"] כבר לא נדרש, כל חבילות ה-@types נכללות אוטומטית בקומפילציה (מאז גרסה 2.1 כנראה).

לדעתי הפתרון הפשוט ביותר הוא להוציא את קבצי הבדיקה ב-tsconfig.json שלך כך:

"exclude": [
    "node_modules",
    "**/*.spec.ts"
]

זה עובד בשבילי.

מידע נוסף במסמכי tsconfig הרשמיים.

תשובה #4

אתה צריך להתקין טיפוסים עבור jasmine. בהנחה שאתה בגרסה יחסית עדכנית של TypeScript 2, אתה אמור להיות מסוגל לעשות:

npm install --save-dev @types/jasmine

תשובה #5

עם [email או גרסה מאוחרת יותר אתה יכול להתקין טיפוסים עם npm install

npm install --save-dev @types/jasmine

לאחר מכן ייבא את הסוגים אוטומטית באמצעות האפשרות typeRoots בקובץ tsconfig.json.

"typeRoots": [
      "node_modules/@types"
    ],

פתרון זה אינו דורש ייבוא {} מ-'jasmine' בכל קובץ ספציפיקציה.