@@ -528,13 +528,14 @@ public async Task OnUpdateAsync_Ok()
528528 }
529529
530530 [ Fact ]
531- public void HandlerException_Ok ( )
531+ public void IHandlerException_Ok ( )
532532 {
533533 var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
534534 {
535535 pb . Add ( a => a . EnableErrorLogger , true ) ;
536536 pb . AddChildContent < Layout > ( pb =>
537537 {
538+ // 按钮触发异常
538539 pb . Add ( a => a . Main , new RenderFragment ( builder =>
539540 {
540541 builder . OpenComponent < Button > ( 0 ) ;
@@ -552,9 +553,108 @@ public void HandlerException_Ok()
552553 var button = cut . Find ( "button" ) ;
553554 cut . InvokeAsync ( ( ) => button . Click ( ) ) ;
554555 cut . Contains ( "<div class=\" error-stack\" >" ) ;
556+ cut . Contains ( "class=\" layout\" " ) ;
555557 Context . DisposeComponents ( ) ;
556558 }
557559
560+ [ Fact ]
561+ public void ErrorLogger_LifeCycle ( )
562+ {
563+ var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
564+ {
565+ pb . Add ( a => a . EnableErrorLogger , true ) ;
566+ pb . AddChildContent < Layout > ( pb =>
567+ {
568+ pb . Add ( a => a . UseTabSet , false ) ;
569+ pb . Add ( a => a . EnableErrorLogger , true ) ;
570+ pb . Add ( a => a . ShowErrorLoggerToast , false ) ;
571+ pb . Add ( a => a . ErrorLoggerToastTitle , "Title" ) ;
572+ // 按钮触发异常
573+ pb . Add ( a => a . Main , new RenderFragment ( builder =>
574+ {
575+ builder . OpenComponent < MockPage > ( 0 ) ;
576+ builder . CloseComponent ( ) ;
577+ } ) ) ;
578+ } ) ;
579+ } ) ;
580+ cut . Contains ( "<div class=\" error-stack\" >" ) ;
581+ cut . Contains ( "class=\" layout\" " ) ;
582+ }
583+
584+ [ Fact ]
585+ public void ErrorLogger_OnErrorHandleAsync_Page ( )
586+ {
587+ // 页面生命周期内报错调用自定义处理方法
588+ Exception ? ex1 = null ;
589+ var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
590+ {
591+ pb . Add ( a => a . EnableErrorLogger , true ) ;
592+ pb . AddChildContent < Layout > ( pb =>
593+ {
594+ pb . Add ( a => a . UseTabSet , false ) ;
595+ pb . Add ( a => a . OnErrorHandleAsync , ( logger , ex ) =>
596+ {
597+ ex1 = ex ;
598+ return Task . CompletedTask ;
599+ } ) ;
600+ // 按钮触发异常
601+ pb . Add ( a => a . Main , new RenderFragment ( builder =>
602+ {
603+ builder . OpenComponent < MockPage > ( 0 ) ;
604+ builder . CloseComponent ( ) ;
605+ } ) ) ;
606+ } ) ;
607+ } ) ;
608+ Assert . NotNull ( ex1 ) ;
609+ }
610+
611+ [ Fact ]
612+ public void ErrorLogger_OnErrorHandleAsync_Button ( )
613+ {
614+ // 页面生命周期内报错调用自定义处理方法
615+ Exception ? ex1 = null ;
616+ var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
617+ {
618+ pb . Add ( a => a . EnableErrorLogger , true ) ;
619+ pb . AddChildContent < Layout > ( pb =>
620+ {
621+ pb . Add ( a => a . OnErrorHandleAsync , ( logger , ex ) =>
622+ {
623+ ex1 = ex ;
624+ return Task . CompletedTask ;
625+ } ) ;
626+ // 按钮触发异常
627+ pb . Add ( a => a . Main , new RenderFragment ( builder =>
628+ {
629+ builder . OpenComponent < Button > ( 0 ) ;
630+ builder . AddAttribute ( 1 , nameof ( Button . OnClick ) , EventCallback . Factory . Create < MouseEventArgs > ( this , e =>
631+ {
632+ var a = 1 ;
633+ var b = 0 ;
634+ var c = a / b ;
635+ return Task . CompletedTask ;
636+ } ) ) ;
637+ builder . CloseComponent ( ) ;
638+ } ) ) ;
639+ } ) ;
640+ } ) ;
641+ var button = cut . Find ( "button" ) ;
642+ cut . InvokeAsync ( ( ) => button . Click ( ) ) ;
643+ Assert . NotNull ( ex1 ) ;
644+
645+ // 移除自定义逻辑使用内部异常处理逻辑
646+ var layout = cut . FindComponent < Layout > ( ) ;
647+ layout . SetParametersAndRender ( pb =>
648+ {
649+ pb . Add ( a => a . OnErrorHandleAsync , null ) ;
650+ } ) ;
651+ button = cut . Find ( "button" ) ;
652+
653+ ex1 = null ;
654+ cut . InvokeAsync ( ( ) => button . Click ( ) ) ;
655+ Assert . Null ( ex1 ) ;
656+ }
657+
558658 [ Fact ]
559659 public void CollapseBarTemplate_Ok ( )
560660 {
@@ -600,3 +700,15 @@ public void Authorized_Ok()
600700 Context . DisposeComponents ( ) ;
601701 }
602702}
703+
704+ class MockPage : ComponentBase
705+ {
706+ protected override void OnInitialized ( )
707+ {
708+ var a = 1 ;
709+ var b = 0 ;
710+
711+ // 触发生命周期内异常
712+ var c = a / b ;
713+ }
714+ }
0 commit comments