【问题标题】:Django testing ajax endpoint in viewDjango 在视图中测试 ajax 端点
【发布时间】:2014-12-31 21:41:58
【问题描述】:

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

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

{% 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}

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

有谁知道我可以单元测试视图和/或端点函数实际上正在做他们应该做的事情的方法?我宁愿不依赖于使用 django 测试框架为整个项目中以这种方式使用 django-ajax 的一个视图设置 selenium 测试。

【问题讨论】:

    标签: python ajax django unit-testing django-testing


    【解决方案1】:

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

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

    我没用过,但它似乎是一个与 CasperJS 和 PhantomJS 接口的 django 特定的 python 库。

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

    【讨论】:

    • 我可以,是的。但是,如果您注意到我的问题的最后一段,我特意在寻找不必使用 selenium 的方法。
    • 谢谢,这是对设置硒测试的改进。在一个视图模板中测试一个功能仍然感觉有点矫枉过正,但这可能是我可以期待的最好的,而不是编写一堆自定义的东西。
    • 不幸的是,除非您有某种无头浏览器或自动浏览器设置,否则我认为没有任何简单的方法可以测试客户端 JavaScript。
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2021-03-02
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多