【问题标题】:Testing nested modules with rspec and rails [duplicate]使用 rspec 和 rails 测试嵌套模块 [重复]
【发布时间】:2012-10-10 18:34:28
【问题描述】:

可能重复:
Testing modules in rspec

目前我正在使用 rspec 成功地测试我的模块,如下所示:

require 'spec_helper'

module Services
  module AppService
    describe AppService do
      describe "authenticate" do
        it "should authenticate the user" do
          pending "authenticate the user"
        end
      end
    end
  end
end

我的模块位于 应用程序/服务/服务.rb app/services/app_service.rb

但是,有没有更优雅的解决方案来测试我的模块而无需在规范中声明命名空间?我觉得它与我的规范紧密相关,进行更改会引起很多麻烦。

【问题讨论】:

标签: ruby-on-rails ruby testing rspec


【解决方案1】:

您可以这样做,而不是复制AppServices

module Services
  describe AppService do
  end
ene

或者:

describe Services::AppService do
end

我更喜欢前者,因为它允许我不完全限定规范中的常量名称(因为所有内容都在 Services 模块中,所以首先看起来与此相关)。

【讨论】:

  • 我尝试了这两种方法,但我得到一个加载错误gist.github.com/3869226。我的命名空间如下gist.github.com/3869225。我需要使用服务模块吗?这似乎是紧密耦合的......
  • 好的,所以我做了一个 require_relative ,它对我有用。但我觉得我应该能够在不需要文件的情况下做到这一点......
  • 你已经进入了 Rails 自动加载的区域。我个人讨厌自动加载,更喜欢在使用它们的地方要求我的文件。它可以帮助我进行更快的测试(每个测试都可以单独运行,只需要加载它需要加载的内容)并有助于揭示耦合点——我必须显式加载依赖项,因为它不会为我神奇地自动加载。
  • 所以我最终决定将我的服务移到 lib/services 文件夹中,减去 service.rb 文件/模块。但是我可以通过自动加载了解您的来源。然而,在我的测试中是分开的,而不是相互依赖。当我需要测试一个模块时,我必须包含我需要的模块,所以我想我可以说它是成功的,而无需绑定我的测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多