django: test des vues POST-basées avec des objets json

J'ai une application django avec plusieurs vues qui acceptent les objets json via des requêtes POST. Les objets json sont moyennement complexes avec quelques couches d'imbrication, donc j'utilise la bibliothèque json pour analyser raw_post_data, comme indiqué ici:

def handle_ajax_call(request):
    post_json = json.loads(request.raw_post_data)

    ... (do stuff with json query)

Ensuite, je veux écrire des tests pour ces vues. Malheureusement, je ne peux pas comprendre comment passer l'objet json au Client. Voici une version la plus simple de mon code:

def test_ajax_call(self):
    c = Client()
    call_command('loadfixtures', 'temp-fixtures-1') #Custom command to populate the DB

    J = {
      some_info : {
        attr1 : "AAAA",
        attr2 : "BBBB",
        list_attr : [ "x", "y", "z" ]
      },
      more_info : { ... },
      info_list : [ 1, 22, 23, 24, 5, 26, 7 ]
    }

    J_string = json.dumps(J)
    response = c.post('/ajax/call/', data=J_string )

Lorsque j'exécute le test, il échoue avec:

AttributeError: 'str' object has no attribute 'items'

Comment puis-je passer l'objet JSON dans le Client.méthode post?

24
demandé sur Abe 2012-08-03 23:45:09

1 réponses