【问题标题】:Is there an alias that can be used in place of "expect(page).to" in RSpec and Capybara?在 RSpec 和 Capybara 中是否有可以用来代替“expect(page).to”的别名?
【发布时间】:2021-11-10 02:59:43
【问题描述】:

我仍在使用旧的 RSpec 2 语法,如下所示:

page.should have_text('foo')

而不是

expect(page).to have_text('foo')

如果说should 语法完全不受支持,有没有办法构建某种别名以便我仍然可以使用旧语法?基本上将page.should 映射到expect(page).topage.should_notexpect(page).not_to

我认为我只是在语法的可读性/简洁性方面对旧语法有很强的亲和力。谢谢。

【问题讨论】:

    标签: rspec capybara


    【解决方案1】:

    你可能需要用这个看起来很简单的方法修补一些东西: https://github.com/rspec/rspec-expectations/blob/dba67987c63f551d1bf0f7877f069fa8b72d0461/lib/rspec/expectations/syntax.rb#L43:L45

    def should(matcher=nil, message=nil, &block)
      ::RSpec::Expectations::Syntax.warn_about_should_unless_configured(::Kernel.__method__)
      ::RSpec::Expectations::PositiveExpectationHandler.handle_matcher(self, matcher, message, &block)
    end
    

    但是猴子补丁到底是哪个对象呢?很难说,因为page有这个方法,current_scope也有,前者是Capybara::Session类的对象,后者是Capybara::Node::Document。还有哪些其他可能的对象从该模块中获取此should 方法?

    因此,要正确执行此操作,您需要非常了解 Rspec 和 Capybara 内部结构。当您了解它时 - 您需要及时了解该项目的任何未来发展,这些发展可能会影响此功能(您现在负责维护)。如果它是一个商业项目 - 开发人员可能会觉得它很尴尬,并且无论如何都会推动官方语法。

    因此,它不仅仅是一个可以永久使用的简单别名,它还是一个需要维护的功能。我并不是说这不值得,但您需要自己回答这个问题:是吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2015-12-20
      • 2015-05-06
      • 1970-01-01
      相关资源
      最近更新 更多