Я пытаюсь создать интеграционные тесты API для унаследованного кода.
В настоящее время у меня есть часть кода тестирования:
- пересоздать базу данных (используя Fluent Migrations)
- запускает веб-приложение (Owin.Hosting)
- делает вызов API для получения токена аутентификации
- делает вызов API для авторизованной конечной точки
Это прекрасно работает, если я пропущу первый шаг и сделаю только 2) 3) 4).
Немного странно, что я также могу выполнять шаги 1) 2) 3) (поэтому вызов API auth работает с восстановлением базы данных).
Я думал, что мой веб-интерфейс не работает должным образом, но я могу сделать базовый путь, когда не воссоздаю базу данных. Тогда я подумал, может быть, это не работает вообще, когда я воссоздаю базу данных, но я могу авторизовать пользователя. Понятия не имею, что я могу попробовать сейчас.
[Collection("Database Create collection")]
public class RoleControllerTests : IDisposable
{
private readonly IDisposable _server;
private readonly string _url = new Configuration().ServerUrl;
public RoleControllerTests()
{
_server = WebApp.Start<Startup>(_url);
}
public void Dispose()
{
_server.Dispose();
}
[Fact]
public async Task basic_roles_should_exist_in_the_database()
{
// Arrange
var roleApi = RestClient.For<IRoleController>(_url);
IAuthorize auth = new Authorize();
roleApi.AuthenticationHeader = await auth.GetAuthenticationHeaderAsync();
// Act
var rolesData = await roleApi.List();
// Assert
rolesData.ShouldContain(x => x.Name == "User");
rolesData.ShouldContain(x => x.Name == "Displayer");
}
}