我该如何像create
直接在上下文中那样包含FactoryGirl方法?
例如,当我不在上下文中时,这将起作用
role_all = create(:role, name: 'all')
因为spec_helper.rb
我有以下内容,
config.include FactoryGirl::Syntax::Methods
但是,当我处于上下文中时,我需要FactoryGirl.
在方法调用之前包含这样的内容,
context 'has role all' do
role_all = FactoryGirl.create(:role, name: `all`)
subject(:user) { FactoryGirl.create(:user, roles: [ role_all ]) }
# test assumptions on user
end
有人知道吗
您不应该在上下文中设置数据-仅当rspec收集所有示例时才读取一次,并且不会再次执行。如果它当前有效,那仅仅是因为您没有为每个测试重置数据库,这可能会导致一些问题。而是使用before
钩子:
context 'has role all' do
before(:each) { @role_all = create(:role, name: `all`) }
end
还要注意,subject
声明该块时不会执行-每次在测试中调用subject时都会执行。由于ruby proc带有它们创建时所在的上下文,因此role_all
在代码中声明不会引发任何异常。但是,subject
每次调用它时,您将返回不同的对象,这可能会使您的测试丢失。
TL; DR:
上下文不是设置测试数据,而是设置将在每次测试之前或之后运行的功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句