我有一个使用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文件?
答案 0 :(得分:4)
这已不再适用,您可以设置生成器在生成rails应用程序的新部分时创建RSpec规范文件,以及为应用程序的现有部分创建规范文件。
主要功能在于应用程序的生成器配置,该配置在运行 rspec-rails rspec:install 任务时启用,但是如果要指定特定的spec文件到包含/排除,您可能需要这样:
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文件。
答案 1 :(得分:3)
Rspec不会自动为现有模型和控制器创建规格。你现在必须自己创建这些文件。
创建spec文件非常简单。只需将文件以_spec.rb结尾并将其放入其中:
require 'spec_helper';
describe User do;
end
(当然用您正在测试的班级替换用户),你就在那里。
答案 2 :(得分: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