Я сталкиваюсь с этими проблемами, когда я бегу ng test
. Он отлично компилируется и ng build --prod
работает нормально. Я даже не вижу эти переменные с таким именем, просто Observables, но перед переменными стоит $.
ВОПРОС ОБНОВЛЕН
"@types/jasmine": "2.8.9", "@types/jasminewd2": "~2.0.3", "@types/node": "~8.9.4", "codelyzer": "~4.2.1", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", "karma": "~1.7.1", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "~2.0.0", "karma-jasmine": "~1.1.1", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "^5.4.2", "ts-node": "~5.0.1", "tslint": "~5.9.1", "typescript": "~2.7.2"
Это все, что я вижу, когда Карма открывается
РОДИТЕЛЬСКИЙ ТЕСТ-файл
describe('MembersComponent', () => {
let component: MembersComponent;
let fixture: ComponentFixture<MembersComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
ReactiveFormsModule,
HttpClientModule,
RouterTestingModule,
StoreModule.forRoot({})
],
declarations: [MembersComponent, ModalComponent],
providers: [{ provide: Store, useClass: StoreStub }]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MembersComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
ДЕТСКИЙ ИСПЫТАТЕЛЬНЫЙ ФАЙЛ
describe('ModalComponent', () => {
let component: ModalComponent;
let fixture: ComponentFixture<ModalComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ModalComponent],
imports: [FormsModule, ReactiveFormsModule, StoreModule.forRoot({})],
providers: [Store]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ModalComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@Gosha_Fighten Я действительно не знаю, как это сделать. я новичок в карме
Поделитесь своим тестовым кодом Karma.
@Gosha_Fighten готово
Вы издеваетесь над NgRx Store
, используя RxJS BehaviorSubject
. BehaviorSubject не предоставляет такой же API. У него нет таких методов, как dispatch
и select
. См. его документация. Используйте макеты Store от NgRx, как описано в статье Тестирование.
@Gosha_Fighten Я даже не хочу это тестировать. Другие мои части штата не вызывают у меня проблем, только эта. остальные компоненты тоже нормально проверяются
Если вы даже не хотите тестировать store
, попробуйте ниже:
import { of } from 'rxjs';
class StoreStub {
select(val: any) {
if (val === 'whatever action you have defined for RacingSelectors.selectMembers') {
return of<Member[]>([
{}, // create dummy member objects
]);
} else if (val === 'whatever action you have defined for RacingSelectors.selectTeams') {
return of<Team[]>([
{ firstName: '' },
{ lastName: '' },
{ jobTitle: '' },
{ team: '' },
{ status: '' }, // create dummy member objects
]);
}
}
dispatch() {}
}
и в файле spec
:
TestBed.configureTestingModule({
imports: [
ReactiveFormsModule,
HttpClientModule,
RouterTestingModule,
StoreModule.forRoot({})
],
declarations: [MembersComponent, ModalComponent],
providers: [{ provide: Store, useClass: StoreStub}]
}).compileComponents();
}));
it('should create', () => {
component.ngOnInit();
expect(component).toBeTruthy();
});
Привет! Спасибо, что нашли время, чтобы помочь мне. Похоже, проблема в «командах». Я изменил ваш код, чтобы он был массивом Team[] вместо членов, и у меня все еще та же проблема.
@PatricioVargas Я создал его как массив элементов, потому что $members: Observable<Member[]>;
имеет тип Member[]
. Я думаю, что ошибка dispatch of undefined
должна быть решена. Я не вижу никакого кода, связанного с teams
. этот код, кажется, дает can't read teams of undefined
. Это что-то внутри RacingActions
класса?
извините, я случайно стер строку ```$teams: Observable<Team[]>;``` в своих вопросах. Я добавил это снова. Я заметил, что проблема с отправкой исчезла. единственный, который продолжает появляться дважды, это Uncaught TypeError: Cannot read property 'teams' of undefined thrown
Я обновил свой вопрос
@PatricioVargas: я до сих пор не вижу .teams
в предоставленном вами коде. Можете ли вы добавить скриншот всей ошибки. он показывает номер строки, в которой возникает эта ошибка. Это не происходит из вашего кода точно
Ага!! Я не вижу .teams в этом компоненте даже на html-странице. Я думаю, это потому, что .teams
является частью моего состояния. мое состояние следующее {members: Member[], teams: Team[], selectedMember: Member}
@PatricioVargas: Но с моим StoreStub
звонок не должен идти к states
. Мы переопределяем главное store
. Кроме того, можете ли вы вставить весь скриншот ошибки, как я просил ранее. Кроме того, есть ли какой-либо другой дочерний компонент, который может отображаться при тестировании этого компонента?
Квест обновлен. Я добавил весь образ из отладки в карму и загрузил код для дочернего компонента
Давайте продолжить обсуждение в чате.
this.store
не определено. Обычно сервисы издеваются над тестируемыми. Как выглядит ваш макет?