第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

模擬燒瓶單元測(cè)試的令牌 - firebase-admin-python SDK

模擬燒瓶單元測(cè)試的令牌 - firebase-admin-python SDK

吃雞游戲 2022-04-27 13:27:31
我正在使用 firebase-admin-python SDK 來(lái)處理 iOS 應(yīng)用程序和燒瓶后端 (python) 之間的身份驗(yàn)證。這是我的后端身份驗(yàn)證端點(diǎn),遵循firebase 指南:from flask import requestfrom firebase_admin import authdef get():    """accessed via '/api/authtoken' """    try:        fir_token = request.headers["Authorization"]        decoded_token = auth.verify_id_token(fir_token)        fir_auth_id = decoded_token["uid"]    except:        ...如何模擬 fir_token 進(jìn)行單元測(cè)試?我如何也模擬auth.verify_id_token這樣我不需要實(shí)際連接到 firebase 服務(wù)器?
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊

我使用庫(kù)中的patch裝飾器實(shí)現(xiàn)了這一點(diǎn)unittest.mock。


auth.py


...

from flask_restful import Resource, reqparse

from firebase_admin import auth


class Token(Resource):

    def __init__(self):

        self.parser = reqparse.RequestParser()

        self.parser.add_argument('token', type=str, required=True)


    # route for /api/auth/token

    def post(self):

        args = self.parser.parse_args()


        try:

            firebase_user = auth.verify_id_token(args['token'])

        except Exception:

            abort(401)


        # use firebase_user

test_auth.py


from unittest import mock



mock_firebase_user = {

    'user_id': 'firebasegenerateduserid',

    'email': 'testuser@gmail.com',

    # ... add more firebase return values

}


# client is from conftest.py

def test_auth(client):

    with mock.patch('auth.auth.verify_id_token') as magic_mock:

        magic_mock.return_value = mock_firebase_user

        post_data = {

            'token': 'firebaserusertokenid'

        }


        response = client.post('/api/auth/token', data=post_data)

        assert response.status_code == 200


查看完整回答
反對(duì) 回復(fù) 2022-04-27
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

將邏輯放在接口后面。


class TokenVerifier(object):

    def verify(self, token):

        raise NotImplementedError()



class FirebaseTokenVerifier(TokenVerifier):

    def verify(self, token):

        return auth.verify_id_token(token)



class MockTokenVerifier(TokenVerifier):

    def verify(self, token):

         # Return mock object that will help pass your tests.

         # Or raise an error to simulate token validation failures.

然后確保在單元測(cè)試期間您的代碼使用MockTokenVerifier.


還可以創(chuàng)建模擬 ID 令牌,并存根部分 Admin SDK,以便auth.verify_id_token()在測(cè)試期間正常運(yùn)行(請(qǐng)參閱SDK 的單元測(cè)試)。但我更喜歡上面的解決方案,因?yàn)樗?jiǎn)單、更干凈,并且不需要弄亂 SDK 的內(nèi)部結(jié)構(gòu)。


查看完整回答
反對(duì) 回復(fù) 2022-04-27
  • 2 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)