MVCの流れ
(省略、、、。本家に図があります)
例えば、controllerのshowメソッドではこんなふうに@articleを定義
def show
@article = Article.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml =>@article }
end
end
例えば、route.rbではメソッドをルーティング(?) config/routes.rb
Communityguides::Application.routes.draw do devise_for :users resources :articles root :to =>"articles#index" end
% rake routes でroute一覧を表示できる。
articles GET /articles(.:format) articles#index #(/articlesへのGETリクエストはindexメソッドで処理される。(articles_path) ) POST /articles(.:format) articles#create #(同じパスへのPOSTリクエストはcreateメソッドにより処理。) new_article GET /articles/new(.:format) articles#new #(/articles/new へのGETリクエストはnewメソッドで処理される(new_article_path) )
など。。。
テスト(初めての)
自動生成テストの修正
deviseの認証が必要なメソッドがある
devise helpersをtest_helpers.rbに追加
test_helper.rb
class ActionController::TestCase include Devise::TestHelpers end
config/environments/test.rb に
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
test/fixtures/users.yml
user1: id: 1 email: user1@communityguides.eu encrypted_password: abcdef1 #password_salt: efvfvffdv confirmed_at: <%= Time.now %> user2: id: 2 email: user2@communityguides.eu encrypted_password: abcdef2 #password_salt: hjujzjjzt confirmed_at: <%= Time.now %> user3: id: 3 email: user3@communityguides.eu encrypted_password: abcdef3 #password_salt: gheureuf confirmed_at: <%= Time.now %>
testに使うダミーusers?
test/functional/articles_controller_test.rb
書いてある通りに。。。
require 'test_helper'
class ArticlesControllerTest < ActionController::TestCase
setup do
@article = articles(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:articles)
end
test "should get new" do
sign_in users(:user2)
get :new
assert_response :success
end
test "should create article" do
sign_in users(:user2)
assert_diffrence('Article.count') do
post :create, :article => @article.attributes
end
assert_redirected_to article_path(assings(:article))
end
test "should show article" do
get :show, :id => @article.to_param
assert_response :success
end
test "should get edit" do
sign_in users(:user2)
get :edit, :id => @article.to_param
assert_response :success
end
test "should update article" do
sign_in users(:user2)
put :update, :id => @article.to_param, :article => @article.attributes
assert_redirected_to article_path(assigns(:article))
end
test "should destroy article" do
sign_in users(:user2)
assert_difference('Article.count', -1) do
delete :destroy, :id => @article.to_param
end
assert_redirected_to articles_path
end
end
% rake db:test:prepare
% rake
=> 7 tests, 0 assertions, 0 failures, 7 errors, 0 skips
ActiveRecord::StatementInvalid: SQLite3::SQLException: table users has no column named password_salt:
と出るのでusers.ymlからpassword_saltの部分をコメントアウト。
schema.rbでuserテーブル確認してもなかったので、deviseのバージョンによる違いかなと。。。
7 tests, 10 assertions, 0 failures, 0 errors, 0 skips
No comments:
Post a Comment