【问题标题】:RSpec - invalid space character causes undefined method ` should'?RSpec - 无效的空格字符导致未定义的方法“应该”?
【发布时间】: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.charsstr.bytes 的结果可能更容易。
  • 哦,我刚刚看到带有违规字节的编辑 - C2 A0 是 Unicode 不间断空格字符。在 OS X 上,这是通过按 Option-Space 插入的 - 您可能是无意中这样做的吗?
  • 是的,我是 - 不过感谢您的帮助!

标签: ruby rspec atom-editor


【解决方案1】:

原来最可能的原因是我的胖黄油手指按了 alt(选项) + 空格键。这也解释了为什么即使在我切换编辑器之后也会发生这种情况。

我通过下载Karabiner并激活Non Breaking Space To Normal Space解决了这个问题。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多