3

我有一个使用 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 不创建规范文件?

4

3 回答 3

8

这不再适用,您可以将生成器设置为在生成 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 说明中找到更多选项。

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

> 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 命令相同的约定来创建规范文件,包括支架,因此您可以为整个命名空间创建规范文件。

于 2017-09-15T17:46:44.397 回答
3

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

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

require 'spec_helper';
describe User do; 
end 

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

于 2012-05-04T18:41:45.463 回答
0

作为脚注,如果您的生成器命令未生成您期望的文件,请检查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
于 2021-07-14T10:33:06.133 回答