Search code examples
c#assertxunitactionresultjsonresult

Unable to assert ActionResult which returns jsonresult in Xunit


I'm trying to assert an IActionResult which returns a JsonResult. I'm unable to access the IActionResult Values.

How can I do that?

enter image description here

UPDATE

This is the code.

[Fact]
    public async void AppendEmailTemplateUrl_ReturnOk()
    {
        // Arrange
        var mockLogger = new Mock<ILogger<EmailController>>();
        var mockMapper = new Mock<IMapper>();
        var mockEmsWorkUnit = new Mock<IEmsWorkUnit>();
        var mockAzureBlob = new Mock<IAzureBlob>();

        // Setup
        var userRequestTemplateString = File.ReadAllText(@".\EmailController\UserRequestTemplate.txt");
        mockAzureBlob.Setup(blob => blob.GetHtmlBlob(It.IsAny<string>(), It.IsAny<Uri>()))
            .ReturnsAsync(userRequestTemplateString);

        var emailController = new EmailController(mockLogger.Object, mockMapper.Object, mockEmsWorkUnit.Object, mockAzureBlob.Object);
        var jsonString = File.ReadAllText(@".\EmailController\TemplateUrlOk.json");
        var testEmailUrlDto = GeneralHelpers.Deserialize<EmailUrlDto>(jsonString);

        // Act
        var result = await emailController.AppendEmailTemplateUrl(testEmailUrlDto);

        // Assert

    }

Solution

  • Cast the JsonResult.Value back to the known type to be formatted and perform your assertions on that

    //...omitted for brevity
    
    // Act
    IActionResult result = await emailController.AppendEmailTemplateUrl(testEmailUrlDto);
    
    //Assert
    var actual = result as JsonResult;
    Assert.IsNotNull(actual);
    var model = actual.Value as ApiResult;
    Assert.IsNotNull(model);
    
    //...assert model
    

    Also refactor the test to use async Task and not async void

    [Fact]
    public async Task AppendEmailTemplateUrl_ReturnOk() {
        //...omitted for brevity
    }