Как протестировать метод обновления сущности в API
я тестирую свой API, написал интеграционный тест для обновления.
[Fact]
public async Task Returns_Success()
{
//arrange
var dbset = _dbContext.Set<Category>();
dbset.RemoveRange(dbset);
await _dbContext.SaveChangesAsync();
var category = new Faker<Category>()
.RuleFor(x => x.Name, f => f.Random.String2(1, 10))
.RuleFor(x => x.Priority, CategoryPriority.Low)
.Generate();
_dbContext.Set<Category>().Add(category);
await _dbContext.SaveChangesAsync();
var request = new Faker<CategoryUpdateRequest>()
.RuleFor(x => x.Id, category.Id)
.RuleFor(x => x.Name, f => f.Random.String2(1, 10))
.RuleFor(x => x.Priority, CategoryPriority.High)
.Generate();
//act
var response = await _categoryClient.UpdateAsync(request);
//assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var updatedCategory = await _dbContext.Set<Category>().SingleOrDefaultAsync(c => c.Id == category.Id);
updatedCategory.Should().BeEquivalentTo(request);
}
Я добавляю сначала объект, дальше вызываю метод API, затем получаю запись по Id, при этом я не вижу изменений, которые должны были быть внесены в методе API. С чем это может быть связано?
При том, что когда я отправляю запрос через swagger или postman всё обновляется. При отладке теста все изменения также в базе присутствуют, но в БД контексте запись остаётся не отредактированный
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Я решил свою проблему следующим образом:
await
_dbContext.Entry(category).ReloadAsync();
Метод ReloadAsync() позволяет перезагрузить объект из базы данных, перезаписывая значение атрибутов.
Возможно, это можно было решить по другому, буду рад выслушать предложения.