【问题标题】:Ruby, Rspec, and requiring test contollerRuby、Rspec 和需要测试控制器
【发布时间】:2014-05-15 06:43:53
【问题描述】:

我是 Ruby (RoR) 和 rspec 的新手。

我在project/app/controllers/books_controller.rb 中有一个基本的项目脚手架和一个控制器

然后我尝试在project/spec/controllers/book_spec.rb中设置rspec

还有project/spec/spec_helper.rb 需要book_spec.rb。这个文件是我试图包含books_controller.rb 文件的地方。

如何包含 books_controller.rb 文件,以便 book_spec.rb 具有 Book 对象,这样当我运行 rspec 时,它可以工作?

目前我已经尝试过require_relative "../app/controllers/books_controller" 之类的方法,但它不起作用。它给了我一个错误,例如:

uninitialized constant ApplicationController ... in 'require_relative'

任何帮助都会很棒。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rspec


    【解决方案1】:

    您不需要手动包含控制器,只需遵循 rspec 命名约定并描述所需的对象,一切都会正常工作。

    您的控制器规范应命名为books_controller_spec.rb。这与您的控制器的名称完全相同,最后添加了_spec。这不是硬性要求,而是强烈建议的约定,因为 book_spec.rb 确实意味着 Book 模型规范而不是控制器。

    关键部分是在您的规范中描述所需的对象,例如

    describe BooksController do
      #...
    end
    

    您可能还想查看rspec-rails gem,它提供了一些useful generators 的规格。理想情况下,您可以与 Rails 集成,因此每当您生成新模型或控制器时,也会为您创建新规范。

    【讨论】:

    • spec_helper.rb 应该是什么样子?因为我目前有books_controller.rb,现在有books_controller_spec.rb,其中有describe BooksController do ... end。但是当我从项目根目录运行 rspec 时,它仍然返回 uninitialized constant BooksController
    • 使用rspec-rails gem 和bundle install 之后的问题rails generate rspec:install。这应该提供一个具有合理默认值的spec_helper.rb。按照我的答案上的链接。
    • 非常感谢,我没有意识到在我现有的项目中实施它会那么容易。一切正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多