RSpec没有为我的模型和控制器生成规范文件

4

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

我在我的Gemfile中添加了rspec-rails

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

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

这是返回的结果:
create  .rspec
create  spec
create  spec/spec_helper.rb

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

8

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

主要功能位于应用程序的生成器配置中,在运行rspec-railsrspec: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说明中找到更多选项。

现在,当我们生成新内容(例如模型)时:

> 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自己的任务生成规范文件:

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

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


3
Rspec不会自动为您现有的模型和控制器创建规范。现在,您需要自己创建这些文件。
创建规范文件非常容易。只需创建一个以_spec.rb结尾的文件,并将以下内容放入其中:
require 'spec_helper';
describe User do; 
end 

(当然,用你正在测试的类替换User)这样就可以了。

5
不要被这个答案吓到,创建一个规范文件非常容易。只需创建一个文件以“_spec.rb”结尾,并将以下内容放入其中:“require 'spec_helper'; describe User do; end”(当然,将User替换为您正在测试的类),就做到了。 - iain

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接