#angular #jasmine #angular-test
#angular #jasmine #angular-тест
Вопрос:
Я только начал изучать модульное тестирование в angular. У меня есть функция в файле .ts
onValueChange(val: number): void {
this.formGroup.get(this.controlName).setValue(val);
}
Я пытаюсь проверить, имеет ли имя элемента управления значение, переданное в параметрах onValueChange
Я попробовал это в файле spec.ts
it('form value should update from form changes', fakeAsync(() => {
onValueChange(5);
expect(component.formGroup.get(component.controlName)).toEqual(5);
}));
function onValueChange(val: number): void {
component.formGroup.get(component.controlName).setValue(val);
}
что я делаю не так
Ответ №1:
Вы не сравниваете одни и те же вещи в своем заявлении expect.
expect(component.formGroup.get(component.controlName).value).toEqual(5);
Вы пропустили ‘.value’
Помимо этого, я не думаю, что то, что вы делаете, будет считаться теоретическим тестированием исходной функции onValueChange. Я не уверен, почему у вас тестируемая функция находится внутри файла .ts, а не в файле .component.ts. Если ваша функциональность заключена в компоненте, вы можете легко настроить тестовый стенд, и вам не нужно повторять функциональность в тестовом файле.
Увы, если вы не можете поместить его в компонент, даже тогда я бы не рекомендовал воссоздавать исходную функциональность внутри тестового файла. В таких сценариях (идеальным решением было бы избежать таких сценариев) есть несколько обходных путей.
import myTestFunc from 'myFile.ts';
describe('Test function', () => {
let testObj;
beforeEach(()=>{
testObj = {myTestFunc: myTestFunc};
});
it('test', ()=>{
expect(testObj.myTestFunc()).toBe(something);
});
});
Что-то подобное даже позволяет вам использовать шпионов.