【发布时间】:2015-07-25 18:09:43
【问题描述】:
在 RubyMine 和 Atom 中编写规范时,我偶尔会遇到一个非常烦人的错误,其中似乎存在无效的空格字符,因此 ruby 将第一个(空白)字符作为方法名称的一部分。
1) Activity
Failure/Error: it { should belong_to :micropost }
NoMethodError:
undefined method ` should' for #<RSpec::ExampleGroups::Activity:0x007fd00e41bd20>
# ./spec/models/activity_spec.rb:5:in `block (2 levels) in <top (required)>'
注意错误信息中' should'前面的空格。
我已尝试打开不可见字符,但我看不到与正常空间不同的任何东西。
删除it 块内的第一个空格并点击空格键可以解决问题,但是一直返回并修复块非常烦人。
关于导致错误的原因有什么想法吗?
添加
根据建议,我添加了在十六进制编辑器中打开规范。违规字节是C2 A0-
it { should belong_to :micropost }
69 74 20 7B C2 A0 73 68 6F 75 6C 64 20 62 65 6C 6F 6E 67 5F 74 6F 20 3A 6D 69 63 72 6F 70 6F 73 74 20 7D
【问题讨论】:
-
下次发生这种情况时,请在十六进制编辑器中检查脚本并找出该位置中的字节。这可能会提供线索。
-
我在十六进制编辑器(Hex Fiend)中打开了规范文件并添加了结果 - 十六进制对我来说是一个巨大的谜,所以我不知道该怎么做。
-
一个好的十六进制编辑器会并排显示明文和十六进制;十六进制只是每个字节的十六进制表示。字节由值 0-255 表示,以十六进制表示为 00-FF。正常的空格字符是字节 32,即十六进制 20。有关示例,请参见 i.imgur.com/abhz3SW.png。将有问题的文本作为字符串复制并粘贴到 IRB 会话中并检查它,
str.chars和str.bytes的结果可能更容易。 -
哦,我刚刚看到带有违规字节的编辑 -
C2 A0是 Unicode 不间断空格字符。在 OS X 上,这是通过按 Option-Space 插入的 - 您可能是无意中这样做的吗? -
是的,我是 - 不过感谢您的帮助!
标签: ruby rspec atom-editor