【问题标题】:undefined local variable or method `mock' for main:Objectmain:Object 的未定义局部变量或方法“模拟”
【发布时间】:2015-05-04 15:51:18
【问题描述】:

我正在使用Mocha 进行测试。

2.1.5 :047 > require 'mocha'
  => false 

AFAIK 这意味着 mocha 已经加载并且应该没问题。无论如何,在模拟或存根时:

2.1.5 :048 > mock
NameError: undefined local variable or method `mock' for main:Object
    from (irb):48
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/console.rb:90:in `start'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/console.rb:9:in `start'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands.rb:17:in `<top (required)>'
    from ./test/dummy/bin/rails:4:in `require'
    from ./test/dummy/bin/rails:4:in `<main>'
2.1.5 :049 > Github.expects :repos
NoMethodError: undefined method `expects' for Github:Module
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/github_api-0.12.3/lib/github_api.rb:56:in `method_missing'
    from (irb):49
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/console.rb:90:in `start'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/console.rb:9:in `start'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands.rb:17:in `<top (required)>'
    from ./test/dummy/bin/rails:4:in `require'
    from ./test/dummy/bin/rails:4:in `<main>'
2.1.5 :051 >   stub
NameError: undefined local variable or method `stub' for main:Object
    from (irb):51
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/console.rb:90:in `start'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/console.rb:9:in `start'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /home/dawid/.rvm/gems/ruby-2.1.5/gems/railties-4.1.10/lib/rails/commands.rb:17:in `<top (required)>'
    from ./test/dummy/bin/rails:4:in `require'
    from ./test/dummy/bin/rails:4:in `<main>'

模拟是否应该在 IRB 中工作?

【问题讨论】:

    标签: ruby unit-testing


    【解决方案1】:

    在包含 Mocha::API 之前,我遇到了同样的错误。这将 include 将 Mocha 的方法应用于您的 ObjectModuleClass 类,并为您的 irb 会话添加缺少的功能:

    $ irb
    Welcome to IRB. You are using ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]. Have fun ;)
    >> require 'mocha/api' #=> true
    >> include Mocha::API #=> Object
    >> mock #=> #<Mock:0x2da1ce8>
    >> stub #=> #<Mock:0x2d6a680>
    >> Object.expects :something #=> #<Expectation:0x256e878 expected exactly once, not yet invoked: Object.something(any_parameters) >
    

    【讨论】:

    • 它也不起作用。无论如何,只提供代码示例是一种不好的解释方式。
    猜你喜欢
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2014-04-21
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多