单元测试Flask视图嘲笑芹菜任务

jvc*_*c26 8 python unit-testing mocking celery flask

所以,我有一个烧瓶视图,它将一个芹菜任务添加到队列中,并向用户返回200.

from flask.views import MethodView
from app.tasks import launch_task

class ExampleView(MethodView):
    def post(self):
        # Does some verification of the incoming request, if all good:
        launch_task(task, arguments)
        return 'Accepted', 200
Run Code Online (Sandbox Code Playgroud)

问题在于测试以下内容,我不想要有芹菜实例等等.我只想知道在所有验证都没问题后,它会向用户返回200.芹菜launch_task()将在别处测试.

所以我很想模仿那个launch_task()调用,所以基本上什么都不做,使我的单元测试独立于芹菜实例.

我尝试过各种各样的化身:

@mock.patch('app.views.launch_task.delay'):
def test_launch_view(self, mock_launch_task):
    mock_launch_task.return_value = None
    # post a correct dictionary to the view
    correct_data = {'correct': 'params'}
    rs.self.app.post('/launch/', data=correct_data)
    self.assertEqual(rs.status_code, 200)

@mock.patch('app.views.launch_task'):
def test_launch_view(self, mock_launch_task):
    mock_launch_task.return_value = None
    # post a correct dictionary to the view
    correct_data = {'correct': 'params'}
    rs.self.app.post('/launch/', data=correct_data)
    self.assertEqual(rs.status_code, 200)
Run Code Online (Sandbox Code Playgroud)

但似乎无法让它工作,我的观点只是退出500错误.任何援助将不胜感激!

Raf*_*ski 4

我也尝试了任何@patch装饰器,但它不起作用并且我发现了模拟setUp

import unittest
from mock import patch
from mock import MagicMock

class TestLaunchTask(unittest.TestCase):
    def setUp(self):
        self.patcher_1 = patch('app.views.launch_task')
        mock_1 = self.patcher_1.start()

        launch_task = MagicMock()
        launch_task.as_string = MagicMock(return_value = 'test')
        mock_1.return_value = launch_task

    def tearDown(self):
        self.patcher_1.stop()
Run Code Online (Sandbox Code Playgroud)