Skip to main content
 首页 » 编程设计

python之Django 在 View 中测试 ajax 端点

2025年05月04日26birdshome

我正在使用 django-ajax在 Django 应用程序中,并希望对使用它的 View 进行更彻底的单元测试。

我的特定 View 模板包含以下内容:

{% block head_js %}  
    <script type="text/javascript"> 
    $(function() { 
        $('#progressbar').progressbar({ 
            value: false 
        }); 
 
        var checkStatus = function() { 
            $.ajax({ 
                type: "POST", 
                url: '/ajax/MyApp/check_provisioning.json', 
                dataType: 'json', 
                success: function(data) { 
                    if (data.data.complete != true) { 
                        setTimeout(checkStatus, 3000); 
                    } else { 
                        // We've finished provisioning, time to move along. 
                        window.location.replace('/MyApp/next'); 
                    } 
                } 
            }); 
        }; 
 
        checkStatus(); 
    }); 
    </script> 
{% endblock %} 

在 MyApp/endpoints.py 中我有函数(简化):

def check_provisioning(request): 
 
    # Do some stuff                 
 
    return {'complete': some_boolean} 

现在...据我所知, View 在实际使用中运行良好。 但是在进行单元测试时,django 的测试客户端会检索呈现的响应,但不会运行其中嵌入的任何内容。

有谁知道我可以对 View 和/或端点函数实际执行它们应该执行的操作进行单元测试的方法吗?我宁愿不使用 django 测试框架来为整个项目中以这种方式使用 django-ajax 的一个 View 设置 selenium 测试。

请您参考如下方法:

你可以使用类似 django-casper 的东西:

https://github.com/dobarkod/django-casper

我没有使用过它,但它似乎是一个特定于 django 的 python 库,它与 CasperJS 和 PhantomJS 交互。

PhantomJS 是一个基于 web-kit 的 headless 浏览器,它为使用 selenium 的浏览器自动化提供了一个更轻量级的替代方案。