2014-06-06 22 views
8

http://flask.pocoo.org/docs/testing/ önerilerini kullanarak Flask uygulamamı test etmeye çalışıyorum, ancak DELETE yöntemini form verileriyle nasıl test edeceğimi bilemedim. Ben ile test etmek istiyorumFlask test_client: Sınama DELETE isteği verileri

from flask.ext.restful import Resource, reqparse 
... 
def delete(self): 
    self.reqparse.add_argument('arg1', type=str, required=True, location='form') 
    args = self.reqparse.parse_args() 
    ... 

:

def setUp(self): 
    self.app = myApp.app.test_client() 

def test_delete(self): 
    rv = self.app.delete('MyEndPoint', data={'arg1', 'val'}) 

Ama çalışmıyor

Benim silme yöntemi şuna benzer. Ben de werkzeug.test içinde EnvironBuilder kaynak koduna baktım ama hala verilerde nasıl geçeceğine dair hiçbir fikrim yok.

+0

Are olmamalı, Werkzeug 0.10 sürümünde gözden rafine ve birleştirilmiş ve dahil edilecektir edilmiştir '.delete ('/ url/where/my/endpoint/is/mount kullanıyorsunuz ed ', data = {}) 'veya' .delete (' name.of.my.endpoint ', data = {}) '? İlk istediğin şey olduğundan (EnvironBuilder'in ilk argümanı bir URL'dir). –

+0

Sadece ismi kullanıyorum ama yanlış olduğunu düşünmüyorum. [Link] 'deki örnekleri inceleyin (http://flask.pocoo.org/docs/testing/). Ayrıca, yanıt doğru yere ulaştığımı gösteriyor. Sadece verilerde doğru bir şekilde geçmedim. – victorchen

cevap

5

Sadece aynı sorunla karşılaştım ve bu temel olarak Werkzeug'un test yönteminin şu anda DELETE isteklerinin content_type ayarını desteklememesi nedeniyle oluşuyor.

kod here Werkzeug içerik türünü alır gösterir: En Matara sunucu değil öyleyse, o zaman form verilerini environ dışına ve istek haline yapar, asla hiçbir content_type varsa

def _get_content_type(self): 
    ct = self.headers.get('Content-Type') 
    if ct is None and not self._input_stream: 
     if self.method in ('POST', 'PUT', 'PATCH'): 
      if self._files: 
       return 'multipart/form-data' 
      return 'application/x-www-form-urlencoded' 
     return None 
    return ct 

Aslında veriyi yolla.

Nihayetinde, bu bir DELETE yöntemi kullanan ve form verilerini de içeren bir curl isteğini işleyebileceğiniz için Werkzeug ile bir hatadır. Bu sorunu çözmek için Werkzeug repo'ya bir çekme isteği gönderdim. Açıkça şöyle, bu isteğin bir içerik türü belirterek bu sorunun üstesinden gelebilirsiniz, aslında bu arada sorunu çözmek için: https://github.com/mitsuhiko/werkzeug/pull/620

Güncelleme: github üzerinde uymak çekinmeyin

def test_delete(self): 
    rv = self.app.delete('MyEndPoint', 
         data={'arg1', 'val'}, 
         headers={'Content-Type': 'application/x-www-form-urlencoded'}) 

Güncelleme tekrar: Gönderdiğim çekme isteği öylesine umarım bu artık bir sorun :)