ASP. net Core MVC test / make контроллер возвращает строку? - PullRequest
1 голос
/ 13 января 2020

Я сейчас нахожусь в точке, где я хочу написать тест для моего ASP. net Core MVC проекта.

Проблема в том, что я в настоящее время помещаю этот код в свое представление , который на самом деле не подходит для тестирования.

Фрагмент кода выглядит следующим образом:

@if (Model.MealDays != null)
{
    bool boolSaltLess = false;

        @foreach (var c in Model.MealDays)
        {
                @{
                    if (@c.Meal.Saltless == true)
                    {
                        boolSaltLess = true;
                    }
                }
        }
    <div>
        <p><b>Missing meal diets:</b></p>
        @if (boolSaltLess == false)
        {
            <p style="color:red">A saltless meal!</p>
        }
   </div>
}

Мой первоначальный вопрос: могу ли я переместить этот код в свой контроллер, и что результат, который мне нужно будет вернуть из моего контроллера, чтобы отобразить эту информацию в моем представлении.

    public ViewResult DayDetail(int id)
    {
        Day d = repository.Days.Where(Day => Day.ID == id).FirstOrDefault();
        IEnumerable<MealDay> md = mdRepository.MealDays;

        foreach (MealDay i in md)
        {
            i.Day = repository.Days.Where(Day => Day.ID == i.DayID).FirstOrDefault();
            i.Meal = mRepository.Meals.Where(Meal => Meal.ID == i.MealID).FirstOrDefault();

        }

        return View(d);
    }

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Включите дополнительное свойство в модель представления для передачи данных в представление

public bool Saltless { get; set; }

Переместите лог c в действие контроллера и

//...

model.Saltless = model.MealDays?.Any(c => c.Meal.Saltless);

return View(model);

//...

В представлении Теперь просто проверить свойство

@if (Model.MealDays != null) {    
    <div>
        <p><b>Missing meal diets:</b></p>
    @if (Model.Saltless == false)
    {
        <p style="color:red">A saltless meal!</p>
    }
    </div>
}

И это позволяет проверить логи c с помощью модульных тестов действия Controller

0 голосов
/ 13 января 2020

Логика c не нужна в первую очередь. Просто сделайте:

@if (!Model.MealDays.Any(x => x.Meal.Saltless))
{
    <p style="color:red">A saltless meal!</p>
}

Кроме того, тесты касаются результатов, а не логики c или реализации. Другими словами, испытание проходит, если, когда все блюда без соли, ответ содержит «Без соли!» и нет, если какие-либо блюда без соли. Это значит, что у вас есть логика c, и это все, что имеет значение.

...