在我的項目的__init__.py我有這樣的:瓶禁用CSRF在單元測試
app = Flask(__name__)
app.config.from_object('config')
CsrfProtect(app)
db = SQLAlchemy(app)
我的開發配置文件看起來像:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
DEBUG = True
WTF_CSRF_ENABLED = True
SECRET_KEY = 'supersecretkey'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'project.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
而在我的單元測試設置I有這樣的:
from project import app, db
class ExampleTest(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
self.app = app.test_client()
db.create_all()
理論上,在這裏將WTF_CSRF_ENABLED設置爲False應該可以防止單元測試的CSRF,但是如果我仍然收到CSRF錯誤單元測試時做POST。我認爲這是因爲我已經調用CsrfProtect(app),而WTF_CSRF_ENABLED爲True(當我導入應用程序時,它被調用)。如果我在配置文件中設置了WTF_CSRF_ENABLED = False,它將按預期工作。
無論如何我可以禁用CSRF後,它已被啓用?或者我在這裏咆哮錯誤的樹?
我認爲一旦你導入的應用程序代碼運行,因此它會運行你的默認配置,所以在那之後當你做你的測試時,無論你是否越界配置 – limbo
是的,這也是我的想法。我希望有一種方法可以在事後禁用它,也許不是通過app.config,而是像StopCsrfProtect(app)之類的東西。但這可能是一廂情願的想法。 – vimalloc
我想最簡單的解決方法就是在測試時禁用CSRF來運行它。 – limbo