在 Django 上测试 Ajax

Testing Ajax on Django

我正在尝试为 Ajax 在 Django 中获取请求编写测试。 这是我的尝试。

from django.test import TestCase
from django.urls import reverse
from .models import ResourcePost, User
from register.models import DonorProfile
from django.utils import timezone

class getResourcePostTests(TestCase):
    def setUp(self):
        ResourcePost.objects.create(
            title="test1",
            description="test",
            quantity=10,
            dropoff_time_1=timezone.now(),
            dropoff_time_2=timezone.now(),
            dropoff_time_3=timezone.now(),
            date_created=timezone.now(),
            donor=createdonor_1(),
            resource_category="FOOD",
            status="AVAILABLE",
        )
        ...
                   
    def test_getResourcePost(self):
        rescource_post_1 = ResourcePost.objects.get(title="test1")
        rescource_post_2 = ResourcePost.objects.get(title="test2")
        rescource_post_3 = ResourcePost.objects.get(title="test3")

        response = self.client.get(reverse('donation:getResourcePosts'))
        self.assertEqual(response.status_code, 200)

这是我对 ajax 通话的看法:

@login_required
def getResourcePost(request):
    user = request.user

    curr_user_rc_1 = user.helpseekerprofile.rc_1
    curr_user_rc_2 = user.helpseekerprofile.rc_2
    curr_user_rc_3 = user.helpseekerprofile.rc_3

    posts = ResourcePost.objects.all()
    passingList = []
    for post in posts:
        if post.date_created >= user.helpseekerprofile.message_timer_before and (
            post.resource_category == curr_user_rc_1
            or post.resource_category == curr_user_rc_2
            or post.resource_category == curr_user_rc_3
        ):
            notiPost = {
                "id": post.id,
                "title": post.title,
                "description": post.description,
            }
            passingList.append(notiPost)
    context = {"resource_posts": passingList}

    return JsonResponse(context)

这是我的 ajax 代码:

  $(document).ready(function () {
    setInterval(() => {
      $.ajax({
        type: 'GET',
        url: "{% url 'donation:getResourcePosts' %}",
        success: function (response) {
          $("#display").html('<i class="fas fa-bell"></i>')
          let postCounter = 0
          for (i = 0; i < response.resource_posts.length; i++) {
            postCounter += 1
          }
          if (postCounter > 0) {
            $("#display").append('<span class="message-number">' + postCounter + '</span>')
          }
        },
        error: function (response) {
          console.log("No DATA FOUND")
        }
      })
    }, 1000 * 2)
  })

我总是失败,因为响应是 302。

  1. 为什么我没有得到 200?我该如何解决才能获得 200?
  2. 变量rescource_post_X作为未使用的变量出现。我该如何使用它们?我应该使用它们吗?

谢谢!

@login_required 装饰器正在将您的请求重定向到登录页面