pytest / django: несколько приборов, несколько утверждений, утверждение ожиданий - PullRequest
0 голосов
/ 21 января 2020

У меня есть рабочий, действительный тест для проекта django, dummy_book и test_profile оба прибора. Обратите внимание, что у него есть два утверждения:

def test_correct_items_in_feed(client, dummy_book, test_profile):
    some_author = dummy_book.author_set.first()
    # profile subscribes to author
    Subscription.attempt_addition_by_id(test_profile, some_author.vendor_id)
    client.login(username=test_profile.user.username, password="somepassword")
    test_profile.save()
    # wants fiction books, feed requested
    requested_url = reverse("personal_feed", args=[test_profile.auth_token])
    resp = client.get(requested_url, follow=True)
    assert dummy_book.title in str(resp.content)
    # user no longer wants fiction books, feed requested
    test_profile.notify_fiction = False
    test_profile.save()
    resp = client.get(f"/users/feeds/{test_profile.auth_token}", follow=True)
    assert dummy_book.title not in str(resp.content)

Теперь я хочу реализовать способ проверки двух разных test_profile s:

  1. one test_premium_profile разрешено фильтровать Book с по типу (обратите внимание на атрибут модели test_profile.notify_fiction)

  2. Другой test_free_profile, которому НЕ разрешено фильтровать Book с по типу

У меня уже есть логи c для вышеперечисленного, которая просто игнорирует предпочтения test_free_profile в отношении этого атрибута.

Проблема здесь заключается в том, что для этих двух разных профилей нам нужно утверждать разные утверждения. В частности, для test_free_profile dummy_book.title должно быть в resp.content в обоих сценариях ios, а для test_premium_profile оно должно быть только в первом сценарии.

Как я могу расположить эти разные утверждения для обоих типов Profile s, без дублирования этого теста и кода в нем?

Я знаю, что одно более простое решение - разделить этот тест на два, но меня это не интересует и ради образования, о котором не может быть и речи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...