質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

2286閲覧

[RSpec]developmentとtestを走らせたときで挙動が違う

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/10/25 14:04

編集2016/10/25 14:14

概要

RSpecでtestを走らせているのですが、普通にdevelopmentで動かしたときは正常に動作するのに、
RSpecを走らせたときは異なる挙動をするためにtestが落ちてしまいます。
原因が分かる方、ご回答宜しくお願いします。

状況

以下のようなデバック目的のコードを書いて、挙動の違いを際立たせるようにしました。
(今回の挙動の違いを説明する以外のコードは省略しています)

  • schema(ridgepole)

ruby

1create_table "articles", force: :cascade do |t| 2 t.integer "category_id", null: false, unsigned: true, default: 1 3 t.string "title" 4 t.text "description" 5 t.string "image" 6 t.integer "pv_count", null: false, unsigned: true, default: 0 7 t.integer "released", limit: 1, null: false, default: 0 8 t.datetime "deleted_at" 9 t.datetime "created_at" 10 t.datetime "updated_at" 11end
  • routing

ruby

1Rails.application.routes.draw do 2 resources 'articles' 3end
  • controller

ruby

1class ArticlesController < ActionController::Base 2 def create 3 @article = Article.create 4 raise if @article.id == nil # ここに注目 5 redirect_to edit_article_path(@article) 6 end 7end
  • controller spec

ruby

1require 'rails_helper' 2 3RSpec.describe ArticlesController, type: :controller do 4 it "creates new article in the database" do 5 post :create 6 expect(renponse).to redirect_to edit_article_path(assigns[:article]) 7 end 8end

Run Test

ブラウザで普通にarticles#createにリクエストすると
@article.id == nilはfalseになって正常に処理されるのですが、

$bundle exec rspecでtestを走らせると@article.id == nilが何故かtrueになってraiseされます。

何故testになるとこの部分の挙動が違うのでしょうか。
(idが生成されていない -> DBにsaveされずにinstanceだけ生成されている -> newと同じ挙動??)

ちなみにversionは
ruby 2.3.0
rails 5.0.0
RSpec 3.5.1
です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

不思議ですね。

記載の内容からだとtest用のDBがちゃんと整っていないぐらいしか思いあたりません。
bundle exec rspec した後 test DB の articles にレコードがちゃんと追加されているか確認してみるといいと思います。

投稿2016/10/26 00:16

hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問