【问题标题】:RSpec isn't generating spec files for my models and controllersRSpec 没有为我的模型和控制器生成规范文件
【发布时间】:2012-05-04 18:38:44
【问题描述】:

我有一个使用 Rails 3 的 Rails 应用程序。

我将rspec-rails 添加到我的Gemfile

group :development, :test do
  gem 'rspec-rails'
end

然后我运行bundle install。它显示了我的 gem 列表,所有 rspec gem 都在那里(核心、rails 等)。

但是,当我跑步时

rails g rspec:install

这就是它返回的内容:

create  .rspec
create  spec
create  spec/spec_helper.rb

虽然我的应用程序中有模型和控制器,但它只是创建这些文件。为什么 Rspec 不创建规范文件?

【问题讨论】:

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


    【解决方案1】:

    这不再适用,您可以将生成器设置为在生成 Rails 应用程序的新部分时创建 RSpec 规范文件,以及为应用程序的现有部分创建规范文件。

    主要功能在于应用程序的生成器配置,该配置在运行 rspec-rails rspec:install 任务时启用,但如果您想指定特定的规范文件以包含/排除,你可能想要这个:

    config/environments/development.rb // 或者你想要的任何环境

    Rails.application.configure do
    ...
      config.generators do |g|
        g.test_framework :rspec
        g.fixture_replacement :factory_bot
        g.factory_bot dir: 'spec/factories'
        g.controller_specs false
        g.request_specs true
        g.helper_specs false
        g.feature_specs true
        g.mailer_specs true
        g.model_specs true
        g.observer_specs false
        g.routing_specs false
        g.view_specs false
      end
    end
    

    发电机设置

    “test_framework”选项允许 rails 准确地知道要为哪个测试框架创建测试文件,并根据您的设置生成新文件。

    使用“fixture_replacement”,我们可以在默认情况下阻止 rails 生成夹具,而是在创建每个模型时创建工厂。

    最后是“factory_bot”选项,如果需要,您可以在其中更改工厂文件夹默认值,但在安装时将默认为该目录。您可以在Factory Girl/Bot Instructions 中找到更多选项。

    现在当我们生成新的东西时,比如模型:

    > rails g model settings
      invoke  active_record
      create    db/migrate/20170915173537_create_settings.rb
      create    app/models/setting.rb
      invoke    rspec
      create      spec/models/setting_spec.rb
      invoke      factory_girl
      create        spec/factories/settings.rb
    

    为应用程序的预生成部分生成规范文件

    类似于生成rails文件,可以通过Rspec自己的task生成spec文件:

    > rails g rspec:model old_settings
      create  spec/models/old_settings_spec.rb
      invoke  factory_girl
      create    spec/factories/old_settings.rb
    

    此命令使用与 rails 的 generate 命令相同的约定来创建规范文件,包括 scaffold,因此您可以为整个命名空间创建规范文件。

    【讨论】:

      【解决方案2】:

      Rspec 不会自动为您现有的模型和控制器创建规范。您现在必须自己创建这些文件。

      创建规范文件非常简单。只需创建一个以 _spec.rb 结尾的文件并将其放入其中:

      require 'spec_helper';
      describe User do; 
      end 
      

      (当然用您正在测试的类替换 User),您就在那里。

      【讨论】:

      • 不要被这个答案吓到,创建一个规范文件真的很容易。只需创建一个以_spec.rb 结尾的文件并将其放入其中:require 'spec_helper'; describe User do; end(当然,将 User 替换为您正在测试的类)就可以了。
      【解决方案3】:

      作为脚注,如果您的生成器命令未生成您期望的文件,请检查 application.rb 配置文件以确保未禁用特定规范。

      对我来说,以下生成器没有按预期创建文件。

      % bin/rails g rspec:request api 
      Running via Spring preloader in process 70924 
      %
      

      因为在application.rb

      g.request_specs false
      

      已设置。虽然事后这似乎很明显,但命令输出并不直观。将其设置为 true 并重新运行生成器会产生预期的结果。

      % bin/rails g rspec:request api
      Running via Spring preloader in process 71843
            create  spec/requests/apis_spec.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
        • 2013-01-28
        相关资源
        最近更新 更多