gpt4 book ai didi

ruby - 在 RSpec 上下文中包含 FactoryGirl 方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:41 25 4
gpt4 key购买 nike

如何在上下文中直接包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com