ruby - 试图找到 : . (eval):289 的文件/行:警告:不要在参数括号前放置空格

标签 ruby testing eval parentheses

所以,当我在 ruby​​/RoR 中运行我的测试时,我收到了这个警告

.(eval):289: 警告:不要在参数括号前放置空格

我已经检查了每个地方(但显然没有),我找不到这个错误的根源。

上述错误只是在单元测试之间弹出...

谁能告诉我如何找到这个错误的位置?

最佳答案

文件和行号包含在回溯中。但是,在您的情况下,警告位于在运行时被 eval 编辑的字符串内。这意味着没有文件。 (实际上,eval 方法确实为应该在回溯中显示的文件名和行号采用可选参数,但不幸的是,在这种情况下,无论是谁编写了相关代码忘了传递那些参数。)

我担心您别无选择,只能手动检查整个代码库中对 eval 的每一次调用,包括 Rails,您的测试框架,您的整个应用程序、您的测试、您的插件、您的助手、ruby 标准库,...

当然,你应该意识到问题可能并不像在

eval 'foo (bar, baz)'

也可以是这样的

def foo(*args)
  puts args.join
end

bar = 'Hello'
baz = 'World'

foostr = 'foo'                        # in one file
barstr = 'bar'                        # in another file in a different directory
bazstr = 'baz'                        # in another file in a different directory
argstr = "(#{barstr}, #{bazstr})"     # in yet another file
$,     = ' '                          # in some third-party plugin
str    = [foostr, argstr].join        # in a fourth file
eval str                              # somewhere else entirely
eval str, binding, __FILE__, __LINE__ # this is how it *should* be done

请注意两条警告消息之间的区别:第一条消息与您发布的消息完全一样,但第二条消息的文件名不是 (eval) 并且文件中的行号而不是 eval 字符串中的行号。

顺便说一句:警告消息中的行号 289evald 字符串中的行号 !换句话说:在您的应用程序中某处有一个字符串被evald,它至少 289 行长! (实际上,这更有可能不是在您的应用程序中而是在 Rails 中完成的。Rails 路由器曾经是一个特别糟糕的罪犯,我不知道现在是否仍然如此。)

关于ruby - 试图找到 : . (eval):289 的文件/行:警告:不要在参数括号前放置空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911840/

相关文章:

sql - 指定默认的 Rails 数据库

ruby-on-rails - 在 Controller 操作之间共享一个 Net::IMAP 连接

r - 明确设计用于测试 Web Scraping 应用程序的网站

unit-testing - 开放测试格式?

makefile - GNU Make : How to call $(wildcard) within $(eval)

list - 使用参数评估 Racket 中的列表

ruby-on-rails - 未定义方法 `key?' 为 nil :NilClass when using MongoMapper

ruby-on-rails - 使用 ruby​​ on rails 为 haml 创建一个助手或其他东西

xml - 断言无效、放错位置或出现太频繁

python - 在 Python 2 中创建 input() 背后的基本原理是什么?