Lukas
Lukas

Reputation: 2243

How to write unit tests for Blazor using bUnit when component has injected Radzen's DialogService?

I have a Blazor project with Radzen, and am using bUnit to test my components.

I'm encountering an issue with testing a component that has a DialogService injection. When this line in my test runs

var cut = Render(@<DefaultProcessingTemplate ClientProcessor="mockDatabaseProcessing.Object" />);

I get the following error:

System.InvalidOperationException : Cannot provide a value for property 'DialogService' on type 'ClientProcessing.BlazorServer.Components.Shared.DefaultProcessingTemplate'. There is no registered service of type 'Radzen.DialogService'.

How do I solve this problem? I tried adding a registration for DialogService in program.cs but that didn't change the outcome of the test.

DefaultProcessingTemplate.razor

@using ClientProcessing.Library
@inject IJSRuntime JsRuntime
@inject DialogService DialogService

@if (ClientProcessor as IDataProcessing is not null)
{
    <RadzenRow>
        <RadzenHeading Size="H2" Text="Reporting"></RadzenHeading>
    </RadzenRow>
    <RadzenRow Gap=".5rem" class="rz-mb-6">
        <RadzenButton Click="OpenReportingRunDialog" ButtonStyle="ButtonStyle.Primary" Text="Run"></RadzenButton>
    </RadzenRow>
}
else
{
    // code ...
}

@code {
    [Parameter]
    public IDataProcessing ClientProcessor { get; set; }

    protected override void OnInitialized()
    {
        // ... code
    }

    private async Task OpenReportingRunDialog()
    {
        var parameters = new Dictionary<string, object>()
        {
            { "CommDate", ClientProcessor.GetCurrMo() },
            { "Reporting", ClientProcessor }
        };
        var dialogOptions = new DialogOptions { CloseDialogOnEsc = true, Width = "900px" };

        await DialogService.OpenAsync<ReportingRun>("Run", parameters, dialogOptions);
    }
}

DefaultProcessingTemplateTests.razor

@using ClientProcessing.BlazorServer.Components.Shared
@using ClientProcessing.Library
@using Moq
@using Radzen.Blazor

@inherits TestContext
@code {
    [Fact]
    public void ReportingSectionHeadingExists()
    {
        Mock<IDataProcessing> mockDatabaseProcessing = new Mock<IDataProcessing>();
        var cut = Render(@<DefaultProcessingTemplate ClientProcessor="mockDatabaseProcessing.Object" />);
        var reportingHeading = cut.FindComponent<RadzenHeading>();

        Assert.Equal("Reporting", reportingHeading.Instance.Text);
    }
}

Upvotes: 0

Views: 91

Answers (0)

Related Questions