如何在上下文中直接包含 FactoryGirl 方法,例如 create
?
例如,当我在上下文之外时,这会起作用
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
钩子(Hook):
context 'has role all' do
before(:each) { @role_all = create(:role, name: `all`) }
end
另请注意,subject
block 在声明时不会执行 - 它会在您每次在测试中调用 subject 时执行。由于 ruby proc 带有创建它们的上下文,因此在您的代码中声明的 role_all
不会引发任何异常。然而,您的 subject
将在您每次调用它时返回不同的对象,这可能会导致您的测试失败。
长话短说:
上下文不是为测试设置数据 - 它是设置将在每次测试之前或之后运行的功能。
关于ruby - 在 RSpec 上下文中包含 FactoryGirl 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312835/