Pytest: ошибка коллекции, функция не использует аргумент «дата» - PullRequest
1 голос
/ 16 марта 2020

Почему Pytest возвращает ошибку сбора "В test_billing_month_year: функция не использует аргумент" дата ", даже если дата используется и определена?

Функция billing_month_year () просто возвращает предыдущий месяц и год текущего свидание.

import datetime as dt
import pytest 
from mock import patch

def billing_month_year():
    today = dt.datetime.utcnow()
    #last month from current date
    last_month = today.month - 1 if today.month>1 else 12
    #last year from current date
    last_month_year = today.year if today.month > last_month else today.year - 1
    return last_month, last_month_year

@pytest.mark.parametrize(
    'date, expected',
    [
        #last month in previous year
        (dt.datetime(year=2020, month=1, day=21), (12, 2019)),
        #last month in current year
        (dt.datetime(year=2020, month=2, day=21), (01, 2020)),
    ]
)
@patch('dt.datetime.utcnow')
def test_billing_month_year(date, expected, mock_utcnow):
    mock_utcnow.return_value = date
    test = billing_month_year()
    assert test == expected

1 Ответ

2 голосов
/ 16 марта 2020
Декораторы

всегда применяются в обратном порядке их добавления, например, в этом случае сначала применяется декоратор patch, а затем декоратор pytest.mark.parametrize. Это означает, что аргументы должны быть в соответствующем порядке:

@pytest.mark.parametrize(
    'date, expected',
    [
        (dt.datetime(year=2020, month=1, day=21), (12, 2019)),
        (dt.datetime(year=2020, month=2, day=21), (01, 2020)),
    ]
)
@patch('dt.datetime.utcnow')
def test_billing_month_year(mock_utcnow, date, expected):
    mock_utcnow.return_value = date
    test = billing_month_year()
    assert test == expected

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

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