【问题标题】:Uncaught (in promise): TypeError: Cannot read property 'replace' of undefined未捕获(承诺):TypeError:无法读取未定义的属性“替换”
【发布时间】:2020-09-24 10:11:38
【问题描述】:

Getting Uncaught (in promise): TypeError: Cannot read property 'replace' of undefined on fixture.detectChanges() 方法。

我正在使用 Jest 和 Angular 版本 8 运行测试用例 注意:我的其他测试用例工作正常,所以没有配置错误

Test.spec.ts

let requestListModel= new InvoicesRequestsListModel();
const initialState: InvoicesState = {
requestModel: new InvoicesRequestModel(),
requestListModel: new InvoicesRequestsListModel()
};


const tab: InvoiceResponse[] = [{
totalRecords: 1,
recordsReturned: 1,
invoices:  [{
supplier: "Test Supplier",
invoiceId:"3fa85f64-5717-4562-b3fc-2c963f66af11",
}];

requestListModel.updateTableData(tab)

let invoiceStoreStub: Partial<InvoicesStore> = {
store: {
    requestModel: new InvoicesRequestModel(),
    requestListModel: requestListModel,
},
store$:  new BehaviorSubject<InvoicesState>(initialState).asObservable(),
setInvoiceState: jest.fn(),
setRequestListModel: jest.fn(),
setRequestModel: jest.fn(),
};

describe('TradeInvoicesComponent', () => {
let fixture: ComponentFixture<TradeInvoicesComponent>;
let component: TradeInvoicesComponent;
let stubInvoiceService: InvoicesStore;
let selectMenu: SelectMenuTestHelper;

beforeEach(async(() => {
    const configure: ConfigureFn = testBed => {
        testBed.configureTestingModule({
            declarations: [TradeInvoicesComponent],
            imports: [HttpClientTestingModule, SharedModule, MatTableModule, BrowserAnimationsModule],
            schemas: [NO_ERRORS_SCHEMA],
            providers: [MatSnackBar, { provide: InvoicesStore, useValue: invoiceStoreStub }]
        });
    };

    configureTests(configure).then(testBed => {
        fixture = testBed.createComponent(TradeInvoicesComponent);
        component = fixture.componentInstance;
        stubInvoiceService = testBed.get(InvoicesStore);
        fixture.detectChanges();
        component.dataModel.updateTableData(tab);
    });

}));

componat.ts

@Component({
selector: 'app-trade-invoices',
templateUrl: './trade-invoices.component.html',
styleUrls: ['./trade-invoices.component.scss']
})
export class TradeInvoicesComponent implements OnInit, AfterViewInit {
@ViewChild(MatPaginator, {static: false}) paginator: MatPaginator;
@ViewChild(MatSort, {static: false}) sort: MatSort;
@ViewChild('input', {static: false}) input: ElementRef;
@ViewChild(MatTable, {static: true}) table: MatTable<[]>;

@Output() paginate: EventEmitter<InvoicesRequestsListModel> = new EventEmitter();
@Output() request: EventEmitter<any> = new EventEmitter();
@Input() setSpinner: boolean;
public dataModel: InvoicesRequestsListModel = new InvoicesRequestsListModel();
    displayedColumns: string[] = ['status', 'invoiceId', 'supplier', 'modifieddate'];
public uiPageNumber = 0;

private invoice: Invoice;


constructor(public store: InvoicesStore,
                        private paymentConsumerService: PaymentConsumerService, private 
 _snackBar: MatSnackBar) {

}

ngOnInit() {
    this.dataModel.updateDataModel('pageNumber', this.apiPageNumber);
    this.paginate.emit(this.dataModel);
}

  ngAfterViewInit() {
    this.store.store$.subscribe((invoice: InvoicesState) => {
        this.table.renderRows();
    });
    this.sort.sortChange.subscribe(() => {
        const sortOrder = `${this.sort.active} ${this.sort.direction}`;
        this.changeSort(sortOrder);
    });
}

任何人都可以提出更改和错误。

长日志

错误:未捕获(承诺中):TypeError:无法读取未定义的属性“替换” TypeError:无法读取未定义的属性“替换” 在 Object.eval [作为 updateRenderer] (ng:///DynamicTestModule/TradeInvoicesComponent.ngfactory.js:104:47) 在 Object.debugUpdateRenderer [as updateRenderer] (/packages/core/src/view/services.ts:410:19) 在 checkAndUpdateView (/packages/core/src/view/view.ts:368:12) 在 callViewAction (/packages/core/src/view/view.ts:615:11) 在 execEmbeddedViewsAction (/packages/core/src/view/view.ts:580:9) 在 checkAndUpdateView (/packages/core/src/view/view.ts:360:3) 在 callViewAction (/packages/core/src/view/view.ts:615:11) 在 execComponentViewsAction (/packages/core/src/view/view.ts:559:7) 在 checkAndUpdateView (/packages/core/src/view/view.ts:370:3) 在 callViewAction (/packages/core/src/view/view.ts:615:11) 在 execEmbeddedViewsAction (/packages/core/src/view/view.ts:580:9) 在 checkAndUpdateView (/packages/core/src/view/view.ts:360:3) 在 callViewAction (/packages/core/src/view/view.ts:615:11) 在 execComponentViewsAction (/packages/core/src/view/view.ts:559:7) 在 checkAndUpdateView (/packages/core/src/view/view.ts:370:3) 在 callViewAction (/packages/core/src/view/view.ts:615:11) 在 execComponentViewsAction (/packages/core/src/view/view.ts:559:7) 在 checkAndUpdateView (/packages/core/src/view/view.ts:370:3) 在 callWithDebugContext (/packages/core/src/view/services.ts:630:23) 在 Object.debugCheckAndUpdateView [as checkAndUpdateView] (/packages/core/src/view/services.ts:347:10) 在 ViewRef_.detectChanges (/packages/core/src/view/refs.ts:261:16) 在 ComponentFixture._tick (//packages/core/testing/src/component_fixture.ts:107:28) 在 packages/core/testing/src/component_fixture.ts:120:36 在 ZoneDelegate.Object..ZoneDelegate.invoke (/PROJECT/node_modules/zone.js/dist/zone.js:391:26) 在 AsyncTestZoneSpec.Object..AsyncTestZoneSpec.onInvoke (/PROJECT/node_modules/zone.js/dist/async-test.js:106:39) 在 ProxyZoneSpec.Object..ProxyZoneSpec.onInvoke (/PROJECT/node_modules/zone.js/dist/proxy.js:126:39) 在 ZoneDelegate.Object..ZoneDelegate.invoke (/PROJECT/node_modules/zone.js/dist/zone.js:390:52) 在 Object.onInvoke (/packages/core/src/zone/ng_zone.ts:273:25) 在 ZoneDelegate.Object..ZoneDelegate.invoke (/PROJECT/node_modules/zone.js/dist/zone.js:390:52) 在 Zone.Object..Zone.run (/PROJECT/node_modules/zone.js/dist/zone.js:150:43) 在 NgZone.run (/packages/core/src/zone/ng_zone.ts:171:50) 在 ComponentFixture.detectChanges (/packages/core/testing/src/component_fixture.ts:120:19) 在 /PROJECT/s/chocolate-demo/src/app/trade/trade-invoices/test.spec.ts:82:12 在 ZoneDelegate.Object..ZoneDelegate.invoke (/PROJECT/node_modules/zone.js/dist/zone.js:391:26) 在 AsyncTestZoneSpec.Object..AsyncTestZoneSpec.onInvoke (/PROJECT/node_modules/zone.js/dist/async-test.js:106:39) 在 ProxyZoneSpec.Object..ProxyZoneSpec.onInvoke (/PROJECT/node_modules/zone.js/dist/proxy.js:126:39) 在 ZoneDelegate.Object..ZoneDelegate.invoke (/PROJECT/node_modules/zone.js/dist/zone.js:390:52) 在 Zone.Object..Zone.run (/PROJECT/node_modules/zone.js/dist/zone.js:150:43) 在 /PROJECT/node_modules/zone.js/dist/zone.js:910:34 在 ZoneDelegate.Object..ZoneDelegate.invokeTask (/PROJECT/node_modules/zone.js/dist/zone.js:423:31) 在 AsyncTestZoneSpec.Object..AsyncTestZoneSpec.onInvokeTask (/PROJECT/node_modules/zone.js/dist/async-test.js:90:25) 在 ProxyZoneSpec.Object..ProxyZoneSpec.onInvokeTask (/PROJECT/node_modules/zone.js/dist/proxy.js:157:39) 在 ZoneDelegate.Object..ZoneDelegate.invokeTask (/PROJECT/node_modules/zone.js/dist/zone.js:422:60) 在 Zone.Object..Zone.runTask (/PROJECT/node_modules/zone.js/dist/zone.js:195:47) 在 drainMicroTaskQueue (/PROJECT/node_modules/zone.js/dist/zone.js:601:35) 在 processTicksAndRejections (internal/process/task_queues.js:97:5) 在 resolvePromise (/PROJECT/node_modules/zone.js/dist/zone.js:852:31) 在 /PROJECT/node_modules/zone.js/dist/zone.js:917:17 在 ZoneDelegate.Object..ZoneDelegate.invokeTask (/PROJECT/node_modules/zone.js/dist/zone.js:423:31) 在 AsyncTestZoneSpec.Object..AsyncTestZoneSpec.onInvokeTask (/PROJECT/node_modules/zone.js/dist/async-test.js:90:25) 在 ProxyZoneSpec.Object..ProxyZoneSpec.onInvokeTask (/PROJECT/node_modules/zone.js/dist/proxy.js:157:39) 在 ZoneDelegate.Object..ZoneDelegate.invokeTask (/PROJECT/node_modules/zone.js/dist/zone.js:422:60) 在 Zone.Object..Zone.runTask (/PROJECT/node_modules/zone.js/dist/zone.js:195:47) 在 drainMicroTaskQueue (/PROJECT/node_modules/zone.js/dist/zone.js:601:35) 在 processTicksAndRejections (internal/process/task_queues.js:97:5)

【问题讨论】:

  • 我很漂亮,错误的堆栈跟踪会有一些有用的信息
  • @IAfanasov 日志已添加

标签: angular angular-material jestjs


【解决方案1】:

看起来这个错误发生在组件TradeInvoicesComponent 的 HTML 中。可能在某些属性上使用了replace 函数,并且该属性未定义。尝试在trade-invoices.component.html中找到.replace

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2020-03-24
    • 2021-05-14
    相关资源
    最近更新 更多