使用覆盖率来查看必须测试的内容,并且覆盖率显示旁边必须要测试的内容:
send_alert.apply_async()
我知道是celery任务,但是有什么办法可以测试这行代码吗?
理解测试逻辑的其余代码:
class SomeView(GenericAPIView)
def post(self, request, *args, **kwargs):
#some code
if not value:
send_alert.apply_async()
# response
# not if Response
根据第一个答案编写的测试
@patch('event.views.send_alert')
def test_send_alert(self, mock_send):
data = {some data for post}
response = self.client.post('/api/{0}/mettings/'.format(self.user), data)
print(response.json())
self.assertTrue(mock_send.called)
我还检查了在任务 print('Tasks Passed')
之后我看到任务通过的消息,但测试失败并出现错误 AssertionError: False is not true
最佳答案
我假设您正在使用 Django,因为它是这样标记的。
装饰你的测试:
@override_settings(CELERY_EAGER=True)
def test_foo(self):
# Make your post
或者如果您只是想测试它是否被调用。
from mock import patch
@patch('your_module.your_file.send_alert.apply_async')
def test_foo(self, mock_send):
# make your post with "value" set to True
self.assertTrue(mock_send.called)
关于Python 单元测试 task.apply_async(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49982389/