[Blazor] Improve the reliability of 'JSInteropThrowsInUserCode' (#15219)
* Moves the Dispose logic into `DisposeAsync` instead
of `IAsyncLifetime.DisposeAsync`.
* Adds a `try{...}catch{...}` around output.WriteLine to prevent
situations where writing a log into the ITestOutput outside of the
context of the test causes an exception that makes the test fail.
This commit is contained in:
parent
fe62ce7ce0
commit
394445f0b4
|
|
@ -75,11 +75,6 @@ namespace Microsoft.AspNetCore.Components
|
||||||
|
|
||||||
async Task IAsyncLifetime.DisposeAsync()
|
async Task IAsyncLifetime.DisposeAsync()
|
||||||
{
|
{
|
||||||
if (TestSink != null)
|
|
||||||
{
|
|
||||||
TestSink.MessageLogged -= TestSink_MessageLogged;
|
|
||||||
}
|
|
||||||
|
|
||||||
await DisposeAsync();
|
await DisposeAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,6 +85,11 @@ namespace Microsoft.AspNetCore.Components
|
||||||
|
|
||||||
protected virtual Task DisposeAsync()
|
protected virtual Task DisposeAsync()
|
||||||
{
|
{
|
||||||
|
if (TestSink != null)
|
||||||
|
{
|
||||||
|
TestSink.MessageLogged -= TestSink_MessageLogged;
|
||||||
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -97,7 +97,18 @@ namespace Microsoft.AspNetCore.Components
|
||||||
{
|
{
|
||||||
var log = new LogMessage(context.LogLevel, context.EventId, context.Message, context.Exception);
|
var log = new LogMessage(context.LogLevel, context.EventId, context.Message, context.Exception);
|
||||||
Logs.Enqueue(log);
|
Logs.Enqueue(log);
|
||||||
Output.WriteLine(log.ToString());
|
try
|
||||||
|
{
|
||||||
|
// This might produce an InvalidOperationException when the logger tries to log a message after
|
||||||
|
// the test has completed but before the handler has been removed.
|
||||||
|
// ---> System.InvalidOperationException: There is no currently active test.
|
||||||
|
// For that reason, we capture the exception here and silence it, as the message is captured inside the Logs
|
||||||
|
// variable anyway.
|
||||||
|
Output.WriteLine(log.ToString());
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[DebuggerDisplay("{LogLevel.ToString(),nq} - {Message ?? \"null\",nq} - {Exception?.Message,nq}")]
|
[DebuggerDisplay("{LogLevel.ToString(),nq} - {Message ?? \"null\",nq} - {Exception?.Message,nq}")]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue