У нее есть программа class:
Код: Выделить всё
public partial class Program
{
public static void Main(string[] callParams)
{
new CenterHub().StartWork(callParams);
}
}
Код: Выделить всё
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();
}
}
Код: Выделить всё
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
{
}
Произошла ошибка, пытаясь запустить процесс '/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();
Изменить: я забыл упомянуть, что решение использует Docker Desktop и имеет Docker-compose , который учитывает способность/USR/bin/chrom-bropse , который будет способен использовать/usr/bin/chrop-bropse houndes , который будет способен использовать Docker. Компьютер. < /p>
Как я могу заставить эту работу? Документация делает его очень простым, но в ней не есть запущенный хром, и не должен.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-testing
Мобильная версия