ASP.NET CORE: Как заставить хром работать во время автоматического тестирования?C#

Место общения программистов C#
Ответить
Anonymous
 ASP.NET CORE: Как заставить хром работать во время автоматического тестирования?

Сообщение Anonymous »

Я работаю над основным веб-API ASP.NET, который использует PuppeteerSharp для создания PDF-файлов из HTML.
У нее есть программа class:

Код: Выделить всё

public partial class Program
{
public static void Main(string[] callParams)
{
new CenterHub().StartWork(callParams);
}
}
, который использует CenterHub класс, работающий с настройкой всего:

Код: Выделить всё

public class CenterHub
{
public void StartWork(string[] callParams)
{
WebApplicationBuilder? appBuilder = WebApplication.CreateBuilder(callParams);

appBuilder.Services.AddControllersWithViews();

appBuilder.Services.AddSingleton(new HtmlToPdfService());

WebApplication? runningApp = appBuilder.Build();

runningApp.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

runningApp.Run();
}
}
, среди прочего, startwork () регистрирует htmltopdfservice объект:

Код: Выделить всё

public class HtmlToPdfService
{
private readonly string[] _puppeteerArgs = new[] {
"--no-sandbox",
"--disable-dev-shm-usage",
"--disable-gpu",
"--disable-setuid-sandbox",
"--disable-extensions",
"--disable-software-rasterizer",
"--font-render-hinting=none"
};

private IBrowser _navigateur { get; }
private PdfOptions _optionsPdf { get; }

public HtmlToPdfService()
{
BrowserFetcher browserUser = new();
browserUser.DownloadAsync().GetAwaiter().GetResult();

_browser = Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
ExecutablePath = "/usr/bin/chromium-browser",
Args = _puppeteerArgs
})
.GetAwaiter()
.GetResult();

_pdfOptionSet = new PdfOptions
{
Format = PaperFormat.A4,
PreferCSSPageSize = true,
PrintBackground = true,
};
}
}
< /code>
Все это работает нормально. < /p>
Теперь я хочу использовать автоматические интеграционные тесты на API. Тестовый класс выглядит следующим образом: < /p>
[TestFixture]
internal class TestSpecificDocument1
{
[Test]
public async Task TestsRequestForDocument1()
{
AppTest appObjectForTest = new();

Environment.CurrentDirectory = "/app";

HttpClient clientHttp = appObjectForTest.WithWebHostBuilder(bu => bu.UseEnvironment("Development")).CreateClient();

// Tests will follow once I get the above code to work
}
}
< /code>
использует следующий класс для подготовки приложения для тестирования: < /p>
public class AppTest : WebApplicationFactory
{

}
(я предоставлю файл appsettings.json , если и когда кто -то запрашивает его, но до тех пор я чувствую, что этот вопрос уже достаточно длинный.) />
Произошла ошибка, пытаясь запустить процесс '/usr/bin/chromium-browser' с рабочим каталогом 'c: \ path_to_my_test_project \ bin \ debug \ net8.0'. PrettyPrint-Override ">

Код: Выделить всё

HttpClient clientHttp = appObjectForTest.WithWebHostBuilder(bu => bu.UseStartup()
.UseContentRoot("/app"))
.CreateDefaultClient();
Но я все еще получаю ту же ошибку, за исключением пути, в котором, по мнению хром, не является C: \ app .
Как я могу заставить эту работу? Документация делает его очень простым, но в ней не есть запущенный хром, и не должен.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-testing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»