ответы Python - не все запросы были выполнены - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь создать контрольный пример, чтобы смоделировать вызов API, и использую ответы Python, чтобы смоделировать вызов API.

Ниже приведен мой макет,

with responses.RequestsMock() as rsps:
    url_re = re.compile(r'.*udemy.com/api-2.0/courses.*')           
    url_re = re.compile(r'https://www.udemy.com/api-2.0/courses')
    rsps.add(
        responses.GET, url_re,
        body=mocked_good_json, 
        status=200,
        content_type='application/json',
        match_querystring=True
    )
    courses = self.app.courses.get_all(page=1, page_size=2)         
    for course in courses:              
        self.assertTrue(isinstance(course, Course))
        self.assertTrue(hasattr(course, 'id'))
        self.assertTrue(hasattr(course, 'title'))           
        self.assertIsNotNone(course.id)        

Когда я выполняю этот макет,Я получаю эту ошибку -

AssertionError: Not all requests have been executed [(u'GET', 'https://www.udemy.com/api-2.0/courses/')]

Когда я удаляю макет и напрямую вызываю API, он работает нормально.

Любые входные данные о том, почему мой макет дает сбой?

Ошибкасообщение -

======================================================================
FAIL: test_get_all_courses (tests.test_courses.TestApiCourses)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rem/git/udemy/tests/test_courses.py", line 136, in test_get_all_courses
    courses = self.app.courses.get_all(page=1, page_size=2)
  File "/Users/rem/.virtualenvs/udemyapp/lib/python2.7/site-packages/responses.py", line 536, in __exit__
    self.stop(allow_assert=success)
  File "/Users/rem/.virtualenvs/udemyapp/lib/python2.7/site-packages/responses.py", line 620, in stop
    [(match.method, match.url) for match in not_called]
AssertionError: Not all requests have been executed [(u'GET', 'https://www.udemy.com/api-2.0/courses/')]

1 Ответ

0 голосов
/ 11 декабря 2018

Вы издеваетесь над запросом, но запрос не был вызван в этом тесте.Вы звоните courses = self.app.courses.get_all (page = 1, page_size = 2), я подозреваю, что этот метод courses.get_all вызывает запросы lib.

Согласно docs , после добавления ответа для mock, он должен вызватьзапрос.И вы не вызываете запрос сразу после того, как вы вызываете get_all, и этот метод вызывает запросы.

Итак, вы должны переместить этот тест и адаптировать его, метод get_all иливысмеивать запрос из класса, где он используется, чтобы, глядя на твой код, я полагаю, что он находится в Course.get_all.

...