Angular базовый класс для юнит-тестов - PullRequest
0 голосов
/ 19 марта 2020

Можно ли использовать базовый класс для модульных тестов в angular? Потому что многие мои импорт и декларации всегда одинаковы. Если я добавляю или заменяю класс, мне всегда приходится изменять импорт и объявления в каждом тестовом классе.

    beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [DialogModule, DynamicDialogModule, FormsModule, TableModule, HttpClientTestingModule, ContextMenuModule],
        declarations: [MyDialog ,OtherDialog],
        providers: [MyService],
    })
        .compileComponents();
}));

Приведенный выше код является кодом, который в основном одинаков в каждом тестовом классе, так что это код, который должен быть в базовом классе.

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Ну да, это возможно. Вы можете поместить

export const configureTestBed = () => TestBed.configureTestingModule({
        imports: [DialogModule, DynamicDialogModule, FormsModule, TableModule, HttpClientTestingModule, ContextMenuModule],
        declarations: [MyDialog ,OtherDialog],
        providers: [MyService],
    }).compileComponents();

в экспортированную функцию, вызывая ее в каждом beforeEach (или что-то в этом роде).

Однако , я не рекомендую это , Всякий раз, когда вы проводите модульное тестирование, вы должны только import, declare, provide то, что нужно для того, что вы тестируете.

Если вам import, declare, provide куча вещей, которые component, service, directive не нужны, вы можете создать головную боль для себя И это замедлит выполнение тестов. Из своего опыта я говорю об этом.

Это очень хороший обмен для вас, чтобы прочитать Что означает «DAMP not DRY», когда речь идет о модульных тестах? . Кроме того, не принимайте это всерьез, это нормально, если у вас есть повторяющийся код от теста к тесту. Это даст вам большую гибкость и контроль.

0 голосов
/ 21 апреля 2020

Вы можете забрать все это в TestingModule

@NgModule({
  imports: [
    DialogModule, 
    DynamicDialogModule, 
    FormsModule, 
    TableModule, 
    HttpClientTestingModule, 
    ContextMenuModule
  ],
  declarations: [
    MyDialog,
    OtherDialog
  ],
  providers: [MyService]
})
export class TestingModule { }

Тогда во всех ваших тестах вы можете просто импортировать этот модуль:

beforeEach(async(() => {
  TestBed.configureTestingModule({ imports: [TestingModule] });
}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...