为什么 CasperJS 的 sendAJAX 函数不为 PUT 请求发送任何内容?

Why doesn't CasperJS' sendAJAX function send any content for PUT requests?

我想通过我的应用使用 PUT 方法更新 JSON 对象。我试图部分模拟表单提交的操作。此调用是同步的,因为在 PUT 之后,应返回 200。但是,当我尝试下面的代码时,sendAJAX 不包含对象的内容,PUT 请求的内容长度为:0。通过表单提交的内容具有所有正确的设置 - 内容类型、x-requested-with 等. 我不太清楚为什么下面的代码不能像我期望的那样运行。我还尝试将 var 'data' 设置为 json 格式参数的字符串。这也会导致内容长度的 PUT 请求:0。

我做错了什么?

casper.then(function() {
    this.evaluate(function() {
    var element = document.querySelectorAll("h6");
    for (var i = 0; i < element.length; i++) {
        if (element[i].innerHTML == "Special Tag") {
            var appid = element[i].parentNode.parentNode.getAttribute("app-id");

            var wsurl = "https://appurl.net"+appid;
            var data = new Object();
            data.user_id = "xxxxx-xxxx-xxxx-xxxx-xxxx";
            data.name = "Name";
            data.description = "blahr blahr blahr";
            data.amount = "-9000000";
            data.start = 1409900400000;
            data.finish = 1412492400000;
            data.seq = 0;
            data.locked = false;
            data.paused = false;
            data.contributed_amount = 0;
            data.created = 1409920472782;
            data.modified = 1426538857339;
            data.color = "#E37368";
            data.archived = false;
            data.target_amount = null;
            data.uuid = "xxxx-xxxxx-xxxxx-xxxxxx";
            data.aprox_daily_contribution = 0;
            return JSON.parse(__utils__.sendAJAX(wsurl, "PUT", data, false, { contentType: "application/json"}));

CasperJS' sendAJAX() function does not support PUT requests as seen in the code:

xhr.send(method === "POST" ? dataString : null);

或者更准确地说,它只支持 POST 请求的负载。您必须自己构建 XHR 或相应地更改 CasperJS 代码。


我认为您不需要模拟表单提交。如果您正在测试 Web 应用程序,那么最好实际提交表单然后检查它是否产生了正确的页面而不是解析响应,因为您需要有效地实现逻辑两次:在页面 JavaScript 并在您的测试脚本中。