小编cyf*_*cyf的帖子

如何在rails 3功能测试中发布JSON数据

我打算在我的项目中的请求和响应中使用JSON数据,并在测试中遇到一些问题.

搜索一段时间后,我找到以下curl用于发布JSON数据的代码:

curl -H "Content-Type:application/json" -H "Accept:application/json" \
    -d '{ "foo" : "bar" }' localhost:3000/api/new
Run Code Online (Sandbox Code Playgroud)

在控制器中,我可以使用简单的方法访问JSON数据params[:foo].但对于功能测试,我只找到postxhr(别名xml_http_request).

如何在rails中编写功能测试以达到与使用相同的效果curl?或者我应该以其他方式进行测试?

这是我尝试过的.我找到了xhrin 的实现action_controller/test_case.rb,并尝试添加jhr方法只需更改'Conetent-Type'和'HTTP_ACCEPT'.(已添加test/test_helpers.rb)

def json_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
  @request.env['Content-Type'] = 'Application/json'
  @request.env['HTTP_ACCEPT'] ||= [Mime::JSON, Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
  __send__(request_method, action, parameters, session, flash).tap do
    @request.env.delete 'Content-Type'
    @request.env.delete 'HTTP_ACCEPT'
  end
end
alias jhr :json_http_request
Run Code Online (Sandbox Code Playgroud)

我以同样的方式使用xhr …

json ruby-on-rails functional-testing

15
推荐指数
3
解决办法
1万
查看次数

防止浏览器将行之间的'\n'转换为空格(对于中文字符)

将换行符转换为空格对于英语是有意义的,例如,以下HTML

<p>
This is
a sentence.
</p>
Run Code Online (Sandbox Code Playgroud)

在浏览器中将换行符转换为空格后,我们得到以下内容:

This is a sentence.
Run Code Online (Sandbox Code Playgroud)

这对英语有好处,但对汉字不好,因为我们不使用空格来分隔中文单词.这是一个例子(中文句子的含义与"这是一个句子"相同):

<p>
??
????
</p>
Run Code Online (Sandbox Code Playgroud)

我在Chrome,Safari和IE上获得了以下结果

?? ????
Run Code Online (Sandbox Code Playgroud)

我想要的是以下,没有额外的空间.

??????
Run Code Online (Sandbox Code Playgroud)

如果当前行的最后一个字符和下一行的第一个字符都是中文字符(我认为更有意义),我不知道为什么浏览器不会忽略换行符.或者他们提供了这种机制但需要特殊处理?

顺便说一句,在Vim中,当使用"J"连接线时,如果2行的最后一个和第一个字符都是中文字符,则不会添加空格.但对于英语,将增加一个空间.所以我猜Vim为此做了一些特别的处理.

更新:

虽然我认为这是浏览器的一个问题,但我必须接受它.因此,目前我会在生成HTML之前预处理我的Markdown文本以加入中文行.以下是我在Ruby中做到这一点,完整的代码也可以用来处理中国标点符号是要点

#encoding: UTF-8

# Requires ruby 1.9.x, and assume using UTF-8 encoding

class String
  # The regular expression trick to match CJK characters comes from
  # http://stackoverflow.com/a/4681577/306935
  def join_chinese
    gsub(/(\p{Han})\n(\p{Han})/m, '\1\2')
  end
end
Run Code Online (Sandbox Code Playgroud)

html browser cjk

14
推荐指数
2
解决办法
2908
查看次数

GCC错误消息:尝试使用中毒的"TARGET_I386"

我正在修改Qemu的源代码,创建了这样的文件

#if defined(TARGET_I386)
    /* some defines */
#elif defined(TARGET_ARM)
    /* some other defines */
#endif
Run Code Online (Sandbox Code Playgroud)

然后包含此文件vl.c,并且gcc报告以下错误消息:

error: attempt to use poisoned "TARGET_I386"
error: attempt to use poisoned "TARGET_ARM"
Run Code Online (Sandbox Code Playgroud)

TARGET_I386 在另一个头文件中定义,并在其他qemu的源文件中使用.

这个错误信息的含义是什么?

更新:

正如Matthias Werner所提到的,这些定义不应该用于目标独立代码.这些毒药识别定义于poison.h

c gcc

6
推荐指数
2
解决办法
4425
查看次数

标签 统计

browser ×1

c ×1

cjk ×1

functional-testing ×1

gcc ×1

html ×1

json ×1

ruby-on-rails ×1