【问题标题】:How can I change the module context of an RSpec describe block?如何更改 RSpec 描述块的模块上下文?
【发布时间】:2012-02-02 17:49:34
【问题描述】:

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

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

这是很多重复,这让我看起来像是在使用一个对象 来自其他命名空间。我想将规范的上下文设置为 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 永远不会加载。

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

【问题讨论】:

    标签: ruby rspec activesupport


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 是的,described_class 是我们一直在使用的,但我发现它更难阅读。我希望对对象的调用看起来像同一命名空间中的任何其他对象调用它的方式。那好吧。在我接受之前,我会看看是否有人能击败这个答案。
    • 另外一件事,如果你想引用同一命名空间中的其他类, describe_class 也不好。也在寻找更好的解决方案。
    【解决方案2】:

    你能把它赋值给一个变量吗?

    widget_class = Foo::Bar::Baz::Quux::Widget
    

    这应该会稍微干掉代码。只是一个想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 2018-02-28
      • 2014-12-07
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多