Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

118
Visualizações
¿Cómo probar las vistas que usan la solicitud de publicación en Django?

aquí está mi punto de vista (simplificado):

 @login_required(login_url='/try_again') def change_bar(request): foo_id = request.POST['fid'] bar_id = request.POST['bid'] foo = models.Foo.objects.get(id=foo_id) if foo.value > 42: bar = models.Bar.objects.get(id=bar_id) bar.value = foo.value bar.save() return other_view(request)

Ahora me gustaría comprobar si esta vista funciona correctamente (en este modelo simplificado, si la instancia de Bar cambia de valor cuando debería). ¿Cómo lo hago?

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Voy a suponer que te refieres a pruebas automatizadas en lugar de solo verificar que la solicitud posterior parece funcionar. Si se refiere a lo último, simplemente verifique ejecutando la solicitud y verificando los valores de Foo y Bar relevantes en un shell o en el administrador.

La mejor manera de enviar solicitudes POST es usando un Client . Asumiendo que el nombre de la vista es my_view :

 from django.test import Client from django.urls import reverse c = Client() c.post(reverse('my_view'), data={'fid':43, 'bid':20})

Pero aún necesita algunos datos iniciales en la base de datos, y debe verificar si se realizaron los cambios que esperaba. Aquí es donde podrías usar un TestCase :

 from django.test import TestCase, Client from django.urls import reverse FooBarTestCase(TestCase): def setUp(self): # create some foo and bar data, using foo.objects.create etc # this will be run in between each test - the database is rolled back in between tests def test_bar_not_changed(self): # write a post request which you expect not to change the value # of a bar instance, then check that the values didn't change self.assertEqual(bar.value, old_bar.value) def test_bar_changes(self): # write a post request which you expect to change the value of # a bar instance, then assert that it changed as expected self.assertEqual(foo.value, bar.value)

Una biblioteca que encuentro útil para configurar algunos datos para ejecutar las pruebas más fácilmente es FactoryBoy . Reduce el estándar cuando se trata de crear nuevas instancias de Foo o Bar con fines de prueba. Otra opción es escribir accesorios, pero me parece menos flexible si tus modelos cambian.

También recomendaría este libro si desea obtener más información sobre las pruebas en python. Está orientado a django, pero los principios se aplican a otros marcos y contextos.

editar: se agregaron consejos sobre factoryboy y enlace al libro

about 4 years ago · Santiago Trujillo Relatório

0

puede intentar poner declaraciones de "impresión" entre el código y ver si se guarda el valor correcto. También para actualizar en lugar de consultar con "get" y luego guardarlo (bar.save()), puede usar el método "filter" y "update".

 @login_required(login_url='/try_again') def change_bar(request): foo_id = request.POST['fid'] bar_id = request.POST['bid'] foo = models.Foo.objects.get(id=foo_id) if foo.value > 42: models.Bar.objects.filter(id=bar_id).update(value=foo.value) #bar.value = foo.value #bar.save() return other_view(request)
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda