私はdevise_invitableをアプリケーションに統合しており、gemのいくつかのメソッドをオーバーライドするためにカスタムコントローラー(InvitationsController)を作成する必要がありました。今、私は自分が行ったことをカバーするためのテストを書きたいのですが、新しいコントローラーの仕様を生成する方法がわかりません。どんな助けでも大歓迎です。
ありがとう!
私はdevise_invitableをアプリケーションに統合しており、gemのいくつかのメソッドをオーバーライドするためにカスタムコントローラー(InvitationsController)を作成する必要がありました。今、私は自分が行ったことをカバーするためのテストを書きたいのですが、新しいコントローラーの仕様を生成する方法がわかりません。どんな助けでも大歓迎です。
ありがとう!
rspecの方法は
rails g rspec:controller passwords
それは与えます
create spec/controllers/passwords_controller_spec.rb
- アップデート
モデルまたはコントローラーの作成時にrspecを生成するようにアプリケーションを構成できます。config/application.rbに追加します
# don't generate RSpec tests for views and helpers.
config.generators do |g|
g.test_framework :rspec, fixture: true
g.fixture_replacement :factory_girl, dir: 'spec/factories'
g.view_specs false
g.helper_specs false
end
$rails g model category
invoke mongoid
create app/models/category.rb
invoke rspec
create spec/models/category_spec.rb
invoke factory_girl
create spec/factories/categories.rb
$rails g controller categories
create app/controllers/categories_controller.rb
invoke haml
create app/views/categories
invoke rspec
create spec/controllers/categories_controller_spec.rb
invoke helper
create app/helpers/categories_helper.rb
invoke rspec
invoke assets
invoke coffee
create app/assets/javascripts/categories.js.coffee
invoke scss
create app/assets/stylesheets/categories.css.scss
Rails 3 + rspecを使用していて、rspec(rails g rspec:install
)をインストールした場合は、生成する各コントローラー(およびその他のオブジェクト)のコントローラー仕様が生成されます。
手作業で作成する必要がある場合。に新しいものを作成するだけnew_controller_name_spec.rb
ですspec/controllers
。
require 'rails_helper'
describe NewControllerName do
# Test!
end
また、コントローラーファイルの再生成を試みることもできます。既存のコントローラーを上書きするかどうかを尋ねられたら、「いいえ」と言ってください。うまくいけば、そのコントローラーのrspecが再度生成されます。
Rails5およびRSpec3.5以降、コントローラースペックファイルは推奨されるアプローチではなくなり、代わりにRSpecはリクエストと呼ばれるファイルを作成します。これらのファイルは、特定のURLに対してリクエストが行われたときに何が起こるかをテストすることにより、コントローラーの出力をテストします。
次のことを考慮してください。
rails g rspec:controller fruits
Pre-Rails 5では、次のようなファイルを取得します。
spec/controllers/fruits_controller_spec.rb
Rails 5を使用すると、次のようなファイルが得られます。
spec/requests/fruits_request_spec.rb
RSpec 3.5リリースノートには、これについてさらに詳しく説明があります。
RailsチームとRSpecコアチームの公式の推奨事項は、代わりにリクエストスペックを作成することです。リクエストの仕様では、単一のコントローラーアクションに集中できますが、コントローラーテストとは異なり、ルーター、ミドルウェアスタック、およびラックのリクエストとレスポンスの両方が含まれます。これにより、作成しているテストにリアリズムが追加され、コントローラーの仕様に共通する問題の多くを回避できます。
Railsがコントローラーの仕様を作成しなかった理由を理解しようとしていたために立ち寄った人にこれが役立つことを願っています!