我在测试中使用let(:foo) { create_foo() }
。 create_foo
是一个测试助手,可以进行一些相当费时的设置。
因此,每次运行测试时,都会创建foo
,这需要一些时间。但是,foo
对象本身并没有改变,我只想逐个单独测试该对象的单元测试方法。
那么,是否有一个相当于
let
的RSpec可以在多个示例之间共享变量,但保留延迟加载(如果不需要foo
)这样的好东西,以及foo
的自动方法定义,以便可以在共享示例中使用它,而不使用@foo
引用它?
或者我必须简单地定义一个
def foo
create_foo()
end
答案 0 :(得分:1)
你能把它放在共享的例子中,但是使用memoization吗?
def foo
@foo ||= create_foo()
end
答案 1 :(得分:1)
以这种方式使用let
违背了它的设计目标。您应该考虑使用每个测试组运行一次的before_all
:
before :all do
@instancevar = create_object()
end
请记住,如果create_object()命中数据库,这可能不明智,因为它可能会在测试之间引入耦合和维护状态。