Workarounds to make SPA template tests work
This commit is contained in:
parent
849a0843c9
commit
a76a891865
|
|
@ -8,6 +8,7 @@ using System.Net.Http;
|
||||||
using Microsoft.Extensions.CommandLineUtils;
|
using Microsoft.Extensions.CommandLineUtils;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace Templates.Test.Helpers
|
namespace Templates.Test.Helpers
|
||||||
{
|
{
|
||||||
|
|
@ -92,16 +93,46 @@ namespace Templates.Test.Helpers
|
||||||
public void AssertNotFound(string requestUrl)
|
public void AssertNotFound(string requestUrl)
|
||||||
=> AssertStatusCode(requestUrl, HttpStatusCode.NotFound);
|
=> AssertStatusCode(requestUrl, HttpStatusCode.NotFound);
|
||||||
|
|
||||||
public void AssertStatusCode(string requestUrl, HttpStatusCode statusCode)
|
public void AssertStatusCode(string requestUrl, HttpStatusCode statusCode, string acceptContentType = null)
|
||||||
{
|
{
|
||||||
var request = new HttpRequestMessage(
|
var request = new HttpRequestMessage(
|
||||||
HttpMethod.Get,
|
HttpMethod.Get,
|
||||||
new Uri(_listeningUri, requestUrl));
|
new Uri(_listeningUri, requestUrl));
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(acceptContentType))
|
||||||
|
{
|
||||||
|
request.Headers.Add("Accept", acceptContentType);
|
||||||
|
}
|
||||||
|
|
||||||
var response = _httpClient.SendAsync(request).Result;
|
var response = _httpClient.SendAsync(request).Result;
|
||||||
Assert.Equal(statusCode, response.StatusCode);
|
Assert.Equal(statusCode, response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AssertStatusCodeWithRetry(string requestUrl, HttpStatusCode statusCode, string acceptContentType = null)
|
||||||
|
{
|
||||||
|
const int MaxAttempts = 3;
|
||||||
|
|
||||||
|
for (var attemptNumber = 1; ; attemptNumber++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AssertStatusCode(requestUrl, statusCode, acceptContentType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
if (attemptNumber >= MaxAttempts)
|
||||||
|
{
|
||||||
|
_output.WriteLine($"Giving up requesting '{requestUrl}' after {attemptNumber} attempts.");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
_output.WriteLine($"Request to '{requestUrl}' failed, but will retry...");
|
||||||
|
Thread.Sleep(3000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public IWebDriver VisitInBrowser()
|
public IWebDriver VisitInBrowser()
|
||||||
{
|
{
|
||||||
_output.WriteLine($"Opening browser at {_listeningUri}...");
|
_output.WriteLine($"Opening browser at {_listeningUri}...");
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Testing.xunit;
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
using OpenQA.Selenium;
|
using OpenQA.Selenium;
|
||||||
|
using System.Net;
|
||||||
using Templates.Test.Helpers;
|
using Templates.Test.Helpers;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
|
|
@ -45,7 +46,11 @@ namespace Templates.Test
|
||||||
{
|
{
|
||||||
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
|
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
|
||||||
{
|
{
|
||||||
aspNetProcess.AssertOk("/");
|
// TODO: Remove the retry from here. Instead, work around the issue in the actual
|
||||||
|
// SpaServices.Extensions code (by retrying). The issue is that @angular/cli rejects
|
||||||
|
// connections for the first second or so after it claims to be listening.
|
||||||
|
// However, you do still need to keep sending "Accept: text/html" or it returns 404.
|
||||||
|
aspNetProcess.AssertStatusCodeWithRetry("/", HttpStatusCode.OK, "text/html");
|
||||||
|
|
||||||
if (WebDriverFactory.HostSupportsBrowserAutomation)
|
if (WebDriverFactory.HostSupportsBrowserAutomation)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue