Рубрики
Без рубрики

Тестирующая логика контроллера с казонитом

Masonite Framework тестирование контроллера логики. Теги с Python, Framework, Masonite, тестированием.

Одной из причин контроллеров структурированы, как будто они являются из-за того, как они становятся. На самом деле сам масонит чрезвычайно реагирован. Основной пакет имеет множество функций, поскольку оно насчитывает весь каркас и по-прежнему составляет ~ 91%.

Давайте приведем пример типичного контроллера и показать, как мы можем изменить его, чтобы быть более поставленным. Я чувствую, что лучший способ пройти эту статью – дать реальный мир И тогда, как мы можем изменить его, чтобы пройти тесты.

Masonite очень реализован, но он позволяет некоторым способам делать то, что не являются оправданными. Например, Masonite поставляется со встроенным помощникам, которые делают различные части вашего кода, не легко протестированы без издевательства на встроенный (который является своего рода странным).

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

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

class PlanController:
    """ Manage User Subscriptions """

    def subscribe(self):
        plan = request().input('plan_id')
        request().user().subscribe(plan, request().input('stripeToken'))

        return request().redirect('/plans')

Если мы идем, чтобы проверить это, это может выглядеть что-то подобное:

from app.http.controllers.PlanController import PlanController

class TestPlanController:

    def setup_method(self):
        self.controller = PlanController()

    def test_controller_subscribes_user(self):
        assert self.controller.show()

Это начнет бросать целую кучу ошибок, потому что:

  1. Python Testing не знает, что, черт возьми, а Запрос () Это потому, что это встроенная функция, которая активируется поставщиком услуг, когда приложение сначала загружается.
  2. Это не правильно, способно получить вход, потому что мы никогда не указали вход.

Давайте рефоктором контроллера, чтобы мы могли по крайней мере пройти по запросу:

from masonite.request import Request

class PlanController:
    """ Manage User Subscriptions """

    def subscribe(self, request: Request):
        plan = request.input('plan_id')
        request.user().subscribe(plan, request.input('stripeToken'))

        return request.redirect('/plans')

Хорошо, потрясающе. Теперь мы можем по крайней мере пройти в классе запроса, поэтому вернемся к нашему тесту контроллера:

from app.http.controllers.PlanController import PlanController
from masonite.request import Request
from masonite.testsuite.TestSuite import generate_wsgi

class TestPlanController:

    def setup_method(self):
        self.request = Request(generate_wsgi())
        self.controller = PlanController()

    def test_controller_subscribes_user(self):
        assert self.controller.show(self.request)

Идеально! Теперь мы можем по крайней мере издеваться в класс запроса. Нам не очень нужно было поднимать класс запроса, потому что мы можем просто использовать реальный класс и издеваться в запрос WSGI.

Обратите внимание, что мы импортировали generate_wsgi Функция в код из тестового набора казонита. Masonite имеет несколько классов помощников и функций, используемые для тестирования, которые мы можем пройти в другой статье.

Хорошо, так что это должно еще не работать, потому что мы на самом деле не загружали пользователь в request.user () метод. Это всегда должно вернуть Нет Отказ

Давайте укажем класс запроса, где у нас есть уже загруженный пользователь. Этот пользователь потребует Подписаться Метод, и мы также проверим, подписан ли пользователь, так что давайте просто насмешливым.

Мы также будем поднимать новую класс запроса, чтобы мы могли добавить любые методы, которые нам нужны в будущем:

from app.http.controllers.PlanController import PlanController
from masonite.request import Request
from masonite.testsuite.TestSuite import generate_wsgi

class MockUser:
    def subscribe(self, plan, token):
        self.plan = plan

    def is_subscribed(self, plan):
        if self.plan == plan:
            return True

        return False

class MockRequest(Request):

    def user(self):
        return MockUser

class TestPlanController:

    def setup_method(self):
        self.request = MockRequest(generate_wsgi())
        self.controller = PlanController()

    def test_controller_subscribes_user(self):
        assert self.controller.show(self.request)

Потрясающие. Теперь мы можем запустить request.user () метод, и это вернется этого Мокезер класс.

У нас нет правильных входов сейчас. Мы также можем легко издеваться над теми:

from app.http.controllers.PlanController import PlanController
from masonite.request import Request
from masonite.testsuite.TestSuite import generate_wsgi

...

class TestPlanController:

    def setup_method(self):
        self.request = MockRequest(generate_wsgi())
        self.controller = PlanController()

    def test_controller_subscribes_user(self):
        # Sets input data
        self.request.request_variables = {'plan_id': 'premium', 'stripeToken': 'tok_amex'}

        assert self.controller.show(self.request)

БОЛЬШОЙ! Теперь у нас есть все, что нам нужно для теста, чтобы пройти правильно. Теперь давайте просто сделаем еще 1 утверждение:

    ...
    ...
    def test_controller_subscribes_user(self):
        # Sets input data
        self.request.request_variables = {'plan_id': 'premium', 'stripeToken': 'tok_amex'}

        assert self.controller.show(self.request)
        assert self.request.user().is_subscribed()

Мы успешно проверили, что этот метод контроллера успешно подписывает пользователей!

Оригинал: “https://dev.to/masonite/testing-controller-logic-with-masonite-o62”