gpt4 book ai didi

ruby - 如何在 'context' 和 'it' block 内外调用相同的方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:39 24 4
gpt4 key购买 nike

下面是一个简单的 rspec 示例:

describe 'Emails' do    
email_ids.each do |email_id|
it "should display #{email_id}" do
end
end
end

def email_ids
[
'test1@example.com',
'test2@example.com',
'test3@example.com'
]
end

上面的方法不起作用,因为在 it block 之外无法访问方法。

请告知如何使方法 email_ids 可在 it block 之外访问。

最佳答案

describe 创建一个(嵌套的)类并评估该类中的给定 block :

describe 'Foo' do     
p self #=> RSpec::ExampleGroups::Foo
describe '' do
p self #=> RSpec::ExampleGroups::Foo::Bar
end
end
另一方面,

it block 在相应类的实例中进行评估:

describe 'Foo' do    
it 'foo' do
p self #=> #<RSpec::ExampleGroups::Foo ...>
end
end

如果您通过 def email_ids 定义一个方法,它会成为一个实例方法,因此只能在实例中使用,即在it 中.

为了使方法在describe 中可用,您必须将其定义为类方法,即通过def self.email_ids :

describe 'Emails' do
def self.email_ids
%w[test1@example.com test2@example.com test3@example.com]
end

email_ids.each do |email_id|
it "should display #{email_id}" do
end
end
end

输出:

Emails
should display test1@example.com
should display test2@example.com
should display test3@example.com

您还可以通过将辅助方法放入模块中并使用 extend 来在多个测试中重用辅助方法。参见 Define helper methods in a module更多示例。

关于ruby - 如何在 'context' 和 'it' block 内外调用相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47546214/

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