gpt4 book ai didi

ruby - 如何更改 RSpec 描述 block 的模块上下文?

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:50 25 4
gpt4 key购买 nike

我有一个对象的规范,它位于多个模块级别。像这样:

describe Foo::Bar::Baz::Quux::Widget do
it "should == another Widget for the same Doohickey" do
doohickey = stub
Foo::Bar::Baz::Quux::Widget.new(doohickey).should == Foo::Bar::Baz::Quux::Widget.new(doohickey)
end

it "should != another Widget for a different Doohickey" do
one_doohickey = stub
another_doohickey = stub
Foo::Bar::Baz::Quux::Widget.new(one_doohickey).should == Foo::Bar::Baz::Quux::Widget.new(another_doohickey)
end
end

这是很多重复,它让我看起来像是在使用一个对象来自其他一些 namespace 。我想将规范的上下文设置为Foo::Bar::Baz::Quux。以下的效果出奇的好:

module Foo::Bar::Baz::Quux
describe Widget do
it "should == another Widget for the same Doohickey" do
doohickey = stub
Widget.new(doohickey).should == Widget.new(doohickey)
end

it "should != another Widget for a different Doohickey" do
one_doohickey = stub
another_doohickey = stub
Widget.new(one_doohickey).should == Widget.new(another_doohickey)
end
end
end

只有一个问题。因为我在 Rails 中,所以我依赖于ActiveSupport 的依赖管理自动加载 Foo::Bar::Baz::Quux模块。之前,当我提到 Foo::Bar::Baz::Quux::Widget 时就会发生这种情况。现在,我自己定义模块,所以模块的真正定义在foo/bar/baz/quux.rb 从未加载。

如何在定义的情况下更改我的规范的常量查找上下文我自己的模块?

最佳答案

您可以使用 described_class 助手...

describe Foo::Bar::Baz::Quux::Widget do
it "has described_class helper" do
described_class.should == Foo::Bar::Baz::Quux::Widget
end
end

或者,为了大声笑:

describe Foo::Bar::Baz::Quux::Widget do
def Widget
described_class
end

it "has described_class helper" do
Widget.should == Foo::Bar::Baz::Quux::Widget
end
end

关于ruby - 如何更改 RSpec 描述 block 的模块上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9117271/

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