2016-04-19 11 views
0

Flaskのルート経由で呼び出されるコードのテストケースを記述しています。私はテストアプリケーションを設定し、ルートに当たるURLを呼び出すことによってコードをテストしたくないので、関数を直接呼び出す必要があります。この作業をするにはflask.requestを偽装する必要があり、管理できないようです。 Google/stackoverflow検索では、やりたいことではないテストアプリケーションの設定方法を示す多くの回答が得られます。PythonのNosetestsの模擬フラスコ.request

コードにはこれをリストするものがあります。

somefile.py 
----------- 
from flask import request 

def method_called_from_route(): 
    data = request.values 

    # do something with data here 

test_somefile.py 
---------------- 
import unittest 
import somefile 

class SomefileTestCase(unittest.TestCase): 

    @patch('somefile.request') 
    def test_method_called_from_route(self, mock_request): 
     # want to mock the request.values here 

私には2つの問題があります。

(1)私が上にスケッチしたようにリクエストにパッチを当てても機能しません。 "AttributeError: 'Blueprint'オブジェクトに 'somefile'属性がないというエラーが表示されます。

(2)リクエストオブジェクトを正確に模倣する方法がわかりません。関数ではないので、実際にはreturn_valueはありません。

もう一度これを行う方法に関する例は見つかりませんので、新しい質問が受け入れられると感じました。

答えて

-1

あなたがしようとしていることは逆効果です。 RFC 2616要求に従うことです:

A request message from a client to a server includes, within the first line of that message, the method to be applied to the resource, the identifier of the resource, and the protocol version in use.

あなたは確かに、あなたがしたいしないであろうものを、その構造を再構築する必要がフラスコ要求をモック!

Flask-Testingのようなものを使用するか、thisのようなレシピを使用して、その方法をテストしてください。