У меня есть код здесь. Моя проблема в том, что мне не удается понять, как создается экземпляр. Почему мы используем «: калькулятор» (строка 3) после «нового калькулятора» (строка 4). Есть разница ? Я знаю, что у меня проблема с Typescript, но я нашел этот фрагмент кода, когда искал тесты в Angular. Также я искал в некоторых учебниках, но не нашел объяснения.
import { Calculator } from './calculator';
describe('Calculator', () => {
let calculator: Calculator;
beforeEach(() => {
calculator = new Calculator();
});
});
🤔 А знаете ли вы, что...
Angular Material - это набор готовых компонентов и стилей для создания стильных веб-приложений с использованием Angular.
Ваш файл «calculator.ts», вероятно, имеет что-то вроде:
export class Calculator {
...
}
Когда вы делаете import { Calculator } from './calculator';
, вы импортируете класс Calculator в свой текущий файл.
let calculator: Calculator;
объявит переменную calculator
присвоив ей тип Calculator
<- Так вы конкретно говорите, что у вас будут Calculator
объекты в этой переменной. Это для понимания машинописных текстов и завершения кода,
Это создаст новый экземпляр класса.
calculator = new Calculator();
Короче говоря, вы используете: Калькулятор для дать тип этой переменной, с другой стороны, она объявлена за пределами сферы действия перед каждым, поэтому она может быть доступна в тестах.
Если бы ты сделал
beforeEach(() => {
let calculator = new Calculator();
});
калькулятор будет недоступен.
import { Calculator } from './calculator'; // importing Calculator class
describe('Calculator', () => { // Describing feature in BDD manner
let calculator: Calculator;
// Declaring variable calculator so it's accessible within whole describe() block
beforeEach(() => { // This hook will be called before each test in your feature
calculator = new Calculator();
// and therefore will create new instance of a Calculator for each test
});
// Here you probably will see something like
it('should return sum of 2 numbers', () => {
const result = calculator.add(2,3); // actual instance used
expect(result).toEqual(5);
});
});