为什么请求不通过简单的API调用在单元测试中发布?

时间:2016-04-04 13:20:04

标签: unit-testing flask

这是我的代码:

#!flask/bin/python
from myProject import app
import unittest


class TestCase(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_login(self):
        response = app.test_client().post('/login', data={})
        self.assertEqual(response.status_code, 200)

if __name__ == '__main__':
    unittest.main()

当我运行此脚本时,我收到以下错误:

======================================================================
FAIL: test_login (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_login.py", line 16, in test_login
    self.assertEqual(response.status_code, 200)
AssertionError: 404 != 200

----------------------------------------------------------------------
Ran 1 test in 0.096s

FAILED (failures=1)

EDIT1:

app.py文件中我有:

from flask_restful import Api
app = Flask(__name__)
api = Api(app)

class myProjectApp(object):
    def setup(self):
         api.add_resource(Login, '/login')

我已经获得了404.但是对/login的简单API调用按预期工作。我的应用程序在端口5000上,如果它仍然相关。这里有什么东西我不见了吗?

EDIT2:

使用单元测试测试烧瓶restful api似乎是不同的,因为使用内置的route装饰器可以完美地工作并且单元测试工作。我应该如何测试烧瓶的API?

1 个答案:

答案 0 :(得分:0)

由于我使用的Api(app)是一个用于restful web服务的外部库,因此路由无法访问。我在unittest方法中调用了setup函数来初始化Api路由。现在它按预期工作:

myApp = myProjectApp()
self.app = myApp.setup()

设置方法包含:

def setup(self):
        api.add_resource(Login, '/login')
        .
        .
        .