如何在 rails 控制台中使用 let 变量?
How to use let variables in rails console?
使用
rspec 2.6.4
rails 3.1.6
如何在 rails 测试控制台中使用 let
变量?
1.9.3-p0 :032 > let(:user) { create(:user) }
NoMethodError: undefined method `let' for main:Object
请指教,这里需要哪个库?
例如:下面在控制台中执行以在控制台中使用stub
方法。
require 'rspec/mocks/standalone'
是否可以在 rails 控制台中定义和调用 let
变量?
如果您不介意 let
只创建全局变量,您可以像这样填充它:
def let(name)
Object.send :instance_variable_set, "@#{name}", yield
Object.send :define_method, name do
Object.send :instance_variable_get, "@#{name}"
end
end
用法与rspec相同:
irb(main):007:0> let(:foo) { 1 }
=> :foo
irb(main):008:0> foo
=> 1
尽管您确实不应该将测试代码粘贴到控制台中进行调试。最好使用像 pry 或 byebug 这样的断点工具。
let
in rspec
只不过是一个延迟执行和记忆的方法定义。如果你必须在 irb 中,你可以这样定义它:
$ cat let.rb
def let(sym)
$let ||= {}
define_method sym do
$let[sym] ||= yield
end
end
require './let
在 irb 中或将它放在 .irbrc
中,你就有了你的 rspec-like let
。请注意,rspec 在每个新示例(it
或 specify
块)中重新评估 let
。由于您在 irb 中没有它们,您可能需要手动清除 let
缓存 ($let = {}
) 以强制重新评估。
使用
rspec 2.6.4
rails 3.1.6
如何在 rails 测试控制台中使用 let
变量?
1.9.3-p0 :032 > let(:user) { create(:user) }
NoMethodError: undefined method `let' for main:Object
请指教,这里需要哪个库?
例如:下面在控制台中执行以在控制台中使用stub
方法。
require 'rspec/mocks/standalone'
是否可以在 rails 控制台中定义和调用 let
变量?
如果您不介意 let
只创建全局变量,您可以像这样填充它:
def let(name)
Object.send :instance_variable_set, "@#{name}", yield
Object.send :define_method, name do
Object.send :instance_variable_get, "@#{name}"
end
end
用法与rspec相同:
irb(main):007:0> let(:foo) { 1 }
=> :foo
irb(main):008:0> foo
=> 1
尽管您确实不应该将测试代码粘贴到控制台中进行调试。最好使用像 pry 或 byebug 这样的断点工具。
let
in rspec
只不过是一个延迟执行和记忆的方法定义。如果你必须在 irb 中,你可以这样定义它:
$ cat let.rb
def let(sym)
$let ||= {}
define_method sym do
$let[sym] ||= yield
end
end
require './let
在 irb 中或将它放在 .irbrc
中,你就有了你的 rspec-like let
。请注意,rspec 在每个新示例(it
或 specify
块)中重新评估 let
。由于您在 irb 中没有它们,您可能需要手动清除 let
缓存 ($let = {}
) 以强制重新评估。