Skip to content

Commit c35a0a9

Browse files
authored
perf(ErrorLog): improving the error handling logic (#5600)
* refactor: 优化逻辑接管后内部不再弹出 Toast * test: 更新单元测试
1 parent 58f8ea8 commit c35a0a9

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

src/BootstrapBlazor/Components/ErrorLogger/BootstrapBlazorErrorBoundary.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,14 @@ protected override async Task OnErrorAsync(Exception exception)
6161
if (OnErrorHandleAsync != null)
6262
{
6363
await OnErrorHandleAsync(Logger, exception);
64+
return;
6465
}
65-
else
66-
{
67-
if (ShowToast)
68-
{
69-
await ToastService.Error(ToastTitle, exception.Message);
70-
}
7166

72-
Logger.LogError(exception, "{BootstrapBlazorErrorBoundary} {OnErrorAsync} log this error occurred at {Page}", nameof(BootstrapBlazorErrorBoundary), nameof(OnErrorAsync), NavigationManager.Uri);
67+
if (ShowToast)
68+
{
69+
await ToastService.Error(ToastTitle, exception.Message);
7370
}
71+
Logger.LogError(exception, "{BootstrapBlazorErrorBoundary} {OnErrorAsync} log this error occurred at {Page}", nameof(BootstrapBlazorErrorBoundary), nameof(OnErrorAsync), NavigationManager.Uri);
7472
}
7573

7674
/// <summary>
@@ -126,16 +124,14 @@ private MarkupString GetErrorContentMarkupString(Exception ex)
126124
/// <param name="handler"></param>
127125
public async Task RenderException(Exception exception, IHandlerException? handler)
128126
{
129-
await OnErrorAsync(exception);
130-
131127
if (handler != null)
132128
{
133129
await handler.HandlerException(exception, ExceptionContent);
130+
return;
134131
}
135-
else
136-
{
137-
_exception = exception;
138-
StateHasChanged();
139-
}
132+
133+
await OnErrorAsync(exception);
134+
_exception = exception;
135+
StateHasChanged();
140136
}
141137
}

src/BootstrapBlazor/Components/ErrorLogger/ErrorLogger.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public class ErrorLogger : ComponentBase, IErrorLogger
5656
[Parameter]
5757
public RenderFragment<Exception>? ErrorContent { get; set; }
5858

59-
private BootstrapBlazorErrorBoundary _errorBoundary = default!;
59+
[NotNull]
60+
private BootstrapBlazorErrorBoundary? _errorBoundary = default;
6061

6162
/// <summary>
6263
/// <inheritdoc/>

test/UnitTest/Components/ErrorHandlerTest.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,31 @@ await cut.InvokeAsync(() => dialog.Show(new DialogOption()
3030
// 关闭弹窗
3131
var btn = cut.Find(".modal-header .btn-close");
3232
await cut.InvokeAsync(() => btn.Click());
33+
}
3334

35+
[Fact]
36+
public async Task ShowToast_Ok()
37+
{
38+
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
39+
{
40+
pb.AddChildContent<ErrorComponent>();
41+
});
42+
var errorButton = cut.Find(".btn-error");
43+
await cut.InvokeAsync(() => errorButton.Click());
3444
cut.Contains("<div class=\"toast-body\">test error logger</div>");
3545

3646
// 关闭 Toast
3747
var toast = cut.FindComponent<Toast>().Instance;
3848
await cut.InvokeAsync(() => toast.Close());
3949
cut.DoesNotContain("<div class=\"toast-body\">test error logger</div>");
50+
51+
cut.SetParametersAndRender(pb =>
52+
{
53+
pb.Add(a => a.ShowToast, false);
54+
});
55+
errorButton = cut.Find(".btn-error");
56+
await cut.InvokeAsync(() => errorButton.Click());
57+
cut.DoesNotContain("<div class=\"toast-body\">test error logger</div>");
4058
}
4159

4260
private class MockDialogTest : ComponentBase

0 commit comments

Comments
 (0)