2017-08-17 3 views
0

J'ai une application Web Pyramid que j'essaie de tester à l'unité.Paramètre d'envoi de test d'unité pyramidale

Dans mes tests fichier je ce bout de code:

anyparam = {"isApple": "True"} 
@parameterized.expand([ 
    ("ParamA", anyparam, 'success')]) 
def test_(self, name, params, expected): 
    request = testing.DummyRequest(params=params) 
    request.session['AI'] = '' 
    response = dothejob(request) 

    self.assertEqual(response['status'], expected, "expected response['status']={0} but response={1}".format(expected, response)) 

Alors que dans mon point de vue:

@view_config(route_name='function', renderer='json') 
def dothejob(request): 
    params = json.loads(request.body) 
    value = params.get('isApple') #true or false. 

Cependant, quand je suis en train de test d'unité, je reçois cette erreur:

JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

Cependant, lorsque je fais la même requête via POST via un navigateur web, cela fonctionne parfaitement.

Répondre

0

En faisant testing.DummyRequest(params=params) vous remplissez seulement request.params, pas request.body.

Vous voulez sans doute faire quelque chose comme:

request = testing.DummyRequest(json_body=params) 

En outre, vous pouvez utiliser directement request.json_body dans votre code au lieu de json.loads(request.body).

+0

Si je fais cela, il y a une erreur d'attribut: l'objet NoneType n'a aucun attribut. Lorsque j'ai essayé de déboguer None est envoyé en tant que paramètres. J'ai également essayé à la fois - request.json_body et json.loads (request.body), même placé dans try/except. – theconqueror972

+0

OK, je n'ai pas vraiment le temps de déboguer cela, mais vous pourriez essayer de faire 'testing.DummyRequest (body = json.dumps (params) .encode ('utf-8'))', ou 'request = test .DummyRequest() 'then' request.body = json.dumps (params) .encode ('utf-8') '. –