0

我有一个运行良好的 UI 和服务器数据交换,但我想开始使用 Frisby.js 测试新开发。UI 有一个使用 jQuery 的 JavaScript 表单管理器。我的请求正文是一个 JavaScript 对象,它首先使用 JSON.stringify 进行序列化。

var msg = {form:"login",data{username:"elmer",password:"wabbit"}};
var json_msg = JSON.stringify(msg);

然后由 jQuery 发送:

$.ajax(
    url: baseUrl+"forms/"+call,
    data: { req: json_msg },
    type: "POST",
    success: function(msg){...

服务器收到的原始正文内容如下所示:

req=%7B%22form%22%3A%22login%22%2C%22data%22%3A%7B%22username%22%3A%22elmer%22%2C%22password%22%3A%wabbit%22%7D%7D

由于这个原始正文内容是我的服务器所期望并成功使用的,因此我尝试了几种内容类型标头和内容格式的组合,但 Frisby.js 会阻塞它们或发送错误的正文。

注意: 1. 首先必须序列化消息(一个 JavaScript 对象)。2. 那么req=[serialized_message] 必须是URIencoded。使用 jQuery.ajax() 可以轻松执行这两个步骤,但在 Frisby.js 上似乎是不可能的

我尝试过:使用未序列化的 JavaScript 对象、使用序列化的 JavaScript 对象以及序列化和 URI 编码的文本(如图所示)

msg = "%7B%22form%22%3A%22login%22%2C%22data%22%3A%7B%22username%22%3A%22elmer%22%2C%22password%22%3A%wabbit%22%7D%7D";

frisby.create('Login on HHHLEG web site.')
  .addHeader('X-Requested-With', 'XMLHttpRequest')
  .post('http://hhhleg/forms/login', req=msg )

上面的代码在到达服务器时最终在正文中没有任何内容。我怀疑存在一些简单的语法问题或内容类型问题,或者 Frisby.js 无法执行序列化和 URI 编码的组合,因为它会阻塞所涉及的字符。

4

2 回答 2

0

Frisby 可能需要 JSON 编码的请求正文,而不是 jQuery 的默认application/x-www-form-urlencoded.

尝试设置contentType

$.ajax({
    url: baseUrl+"forms/"+call,
    data: { req: json_msg },
    type: "POST",
    contentType: "application/json",
    // other properties...
});
于 2015-11-10T19:07:44.223 回答
0

在类似的问题中对我有帮助:
1.创建具有所需名称的变量(在您的情况下是“req”)并将其与msg内容一起发送
2.不使用普通的frisby js post构造函数,而是使用以下内容:

...
    frisby.create('Send valid data in post')
        .post(YourPath,
            req, //before it we need to assign to it value by
                 //"var req = msg" or any byte array
            {
                json: false,
                headers: {
                    "content-type": "application/octet-stream",
                    "Authorization": your.authToken //if needed
                }
            })
        .expectStatus(200)
...

在我的情况下,我尝试发送图像字节数组,但遇到了与 URLencoded 消息和 JSON 格式发送请求类似的问题。
如果它没有帮助或看起来不是您的情况 - 您可以访问https://github.com/vlucas/frisby/tree/legacy-0.x/examples页面以获取更多带有数据发送的 POST 请求示例。

于 2017-03-03T02:51:44.043 回答