【问题标题】:Can't Modify Frozen string error无法修改冻结字符串错误
【发布时间】:2012-01-31 14:09:30
【问题描述】:

我运行一个测试,我会随机得到错误:can't modify frozen String (RuntimeError)

此错误似乎仅在发生超时错误后发生。不确定这是否意味着它们是相关的,但这让我相信。任何人有任何想法是什么原因造成的?它似乎只在命令提示符下运行时发生(至少我还没有通过 Rubymine 看到它)。

编辑: Windows 7 64 位

Ruby 1.9.3 这是我正在使用的 gem:

本地宝石

  • 活动模型 (3.1.3)
  • 活动记录 (3.1.3)
  • activerecord-sqlserver-adapter (3.1.5)
  • activesupport (3.1.3)
  • 是 (2.2.1)
  • 大十进制 (1.1.0)
  • 构建器 (3.0.0)
  • 捆绑器 (1.0.21)
  • 子进程 (0.3.0)
  • composite_primary_keys (4.1.2)
  • 黄瓜 (1.1.4)
  • database_cleaner (0.7.1)
  • diff-lcs (1.1.3)
  • factory_girl (2.5.0, 2.4.2)
  • 伪造者 (1.0.1)
  • ffi (1.0.11, 1.0.9 x86-mingw32)
  • 小黄瓜(2.7.6 x86-mingw32、2.7.3 x86-mingw32)
  • i18n (0.6.0)
  • 即模态 (0.0.4)
  • io 控制台 (0.3)
  • json (1.6.5, 1.5.4)
  • minitest (2.5.1)
  • multi_json (1.0.4)
  • 页面对象 (0.6.1)
  • 泡菜 (0.4.10)
  • 耙子 (0.9.2.2)
  • rdoc (3.9.4)
  • require_all (1.2.1)
  • rspec (2.8.0)
  • rspec-core (2.8.0)
  • rspec-expectations (2.8.0)
  • rspec 模拟 (2.8.0)
  • ruby-odbc (0.99994)
  • rubygems 更新 (1.8.15)
  • rubyzip (0.9.5)
  • selenium-webdriver (2.17.0)
  • term-ansicolor (1.0.7)
  • 测试单元 (2.4.5)
  • tzinfo (0.3.31)
  • watir-webdriver (0.5.0, 0.4.1)
  • 码 (0.7.4)

这是堆栈跟踪:

can't modify frozen String (RuntimeError)
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/formatter/html.r
b:383:in `block in build_exception_detail'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in
`call'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in
`_nested_structures'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/builder-3.0.0/lib/builder/xmlbase.rb:63:in `
method_missing'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/formatter/html.r
b:373:in `build_exception_detail'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/formatter/html.r
b:269:in `exception'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:173:in `block in send_to_all'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:171:in `each'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:171:in `send_to_all'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:166:in `broadcast'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:122:in `visit_exception'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/scenario.rb:
68:in `fail!'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/language_support
/language_methods.rb:117:in `rescue in invoke'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/language_support
/language_methods.rb:113:in `invoke'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/language_support
/language_methods.rb:102:in `block in execute_before'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/language_support
/language_methods.rb:101:in `each'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/language_support
/language_methods.rb:101:in `execute_before'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/language_support
/language_methods.rb:15:in `before'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/runtime/support_
code.rb:112:in `block in fire_hook'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/runtime/support_
code.rb:111:in `each'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/runtime/support_
code.rb:111:in `fire_hook'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/runtime.rb:104:i
n `before'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/background.r
b:39:in `block in accept'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/background.r
b:52:in `block in with_visitor'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/scenario.rb:
108:in `with_visitor'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/background.r
b:51:in `with_visitor'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/background.r
b:38:in `accept'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:57:in `block in visit_background'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:163:in `broadcast'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:56:in `visit_background'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/feature.rb:4
1:in `accept'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:20:in `block in visit_feature'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:163:in `broadcast'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:19:in `visit_feature'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/features.rb:
29:in `block in accept'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/features.rb:
17:in `each'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/features.rb:
17:in `each'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/features.rb:
28:in `accept'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:14:in `block in visit_features'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:163:in `broadcast'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/ast/tree_walker.
rb:13:in `visit_features'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/runtime.rb:46:in
 `run!'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/cli/main.rb:43:i
n `execute!'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/cli/main.rb:20:i
n `execute'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/bin/cucumber:14:in `<top (req
uired)>'
C:/Ruby193/bin/cucumber:19:in `load'
C:/Ruby193/bin/cucumber:19:in `<main>'

编辑 2: 好的,我已经对其进行了追踪,似乎在我的钩子中的 @browser = Watir::Browser.new :ie 命令的深处存在问题 begin 块...不确定这里发生了什么,但我认为我' d 更新我在 atm 的位置。

【问题讨论】:

  • 你能提供一些相关的细节吗?这发生在哪里?什么图书馆?什么版本?这个问题不能用这种形式回答。
  • @Linux_iOS.rb.cpp.c.lisp.m.sh 是的,对不起。刚刚添加的数据应该会有所帮助...如果您需要更多信息,请告诉我。
  • 哇。我认为这是黄瓜中的一个错误。提交错误报告。我认为这里没有人可以帮助你。对不起。
  • 尝试编辑 C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.1.4/lib/cucumber/formatter/html.rb:374 以读取 message = exception.message.dup - 这可能会揭露真正的错误。
  • @jarib 我正在使用您的更改再次运行测试,到目前为止一切都很好......不确定这是否是一件好事,但我会看看我是否可以重现错误改变。如果没有,我会看看我是否可以用原始代码重现它。我会让你们知道一种或另一种方式。

标签: ruby cucumber runtime-error watir-webdriver rubymine


【解决方案1】:

尝试将 @browser 实例的创建移动到 env.rb 文件(在 features/support 中)

如果你总是需要@browser 对象,那么从那里启动它可能比处理钩子更简单。

【讨论】:

    【解决方案2】:

    如果您使用哈希来简化测试,或者在调用 gsub 时使用哈希!在哈希中的键上,这可能会导致错误。不确定您当前的问题是否发生了这种情况。

    我遇到了同样的错误,但情况不同。有关更多详细信息,请参阅Why is a string key for a hash frozen?

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2019-10-24
      • 1970-01-01
      相关资源
      最近更新 更多