RSpec不为我的模型和控制器生成spec文件

问题描述 投票:2回答:2

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

我将rspec-rails添加到我的Gemfile

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

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

但是,当我跑

rails g rspec:install

这就是它的回报:

create  .rspec
create  spec
create  spec/spec_helper.rb

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

ruby-on-rails ruby-on-rails-3 rspec rspec2 rspec-rails
2个回答
3
投票

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

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

require 'spec_helper';
describe User do; 
end 

(当然用你正在测试的课程替换用户)你就在那里。


4
投票

这不再是真的,您可以设置生成器在生成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默认生成fixture,而是创建每个模型创建的工厂。

最后是'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自己的任务生成spec文件:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.