FunctionTest ãã RSpec on Rails ã«æ¸ãæãã¦ã¿ã (ã³ã³ããã¼ã©ç·¨)
前回ã®ç¶ãã§ããä»å㯠FunctionTest ãã RSpec on Rails ã«æ¸ãå¤ãã¦ã¿ã¾ããã
ã·ã³ãã«ãªç½®ãæã
ã¾ãã¯ãåç´ã«ç½®ãæãã¦ã¿ã¾ããã
# todos_controller_test.rb require 'test_helper' class TodosControllerTest < ActionController::TestCase def setup @request.session[:login] = true end def test_should_get_index get :index assert_response :success assert_not_nil assigns(:todos) end def test_should_show_todo get :show, :id => todos(:task1).id assert_response :success assert_not_nil assigns(:todo) end def test_not_login @request.session[:login] = nil get :index assert_redirected_to({:controller => 'login', :action => 'index'}, "ãã°ã¤ã³ããã«indexãã¢ã¯ã»ã¹ããã¨ãã°ã¤ã³ãã¼ã¸ã«ãã°ã¤ã³ãã¼ã¸ã«ãªãã¤ã¬ã¯ããã") end end
describe ã end ã¯ãã¹ãã§ããã®ã§ã¢ã¯ã·ã§ã³æ¯ã« describe ãæ¸ãã¦ã¿ã¾ãããRSpecçã FunctionTestçã¨ã»ã¼åããããªæãã§ãã
# todos_controller_spec.rb require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') describe TodosController do fixtures :todos, :users describe "indexãGETããã" do before(:each) do session[:login] = true get :index end it "æåãã" do response.should be_success end it "@todosã«ãã¼ã¿ãå ¥ã" do assigns[:todos].should_not be_empty end end describe "showãid=:task3ã§GETããã" do before(:each) do session[:login] = true get :show, :id => todos(:task3) end it "æåãã" do response.should be_success end it "@todoã«ãã¼ã¿ãå ¥ã" do assigns[:todo].should_not be_nil end end describe "ãã°ã¤ã³ããã«indexãGETããã" do before(:each) do @request.session[:login] = nil get :index end it "ãã°ã¤ã³ãã¼ã¸ã«ãã°ã¤ã³ãã¼ã¸ã«ãªãã¤ã¬ã¯ããã" do response.should redirect_to(:controller => 'login', :action => 'index') end end end
å®è¡çµæã¯
TodosController indexãGETããã - æåãã - @todosã«ãã¼ã¿ãå ¥ã TodosController showãid=:task3ã§GETããã - æåãã - @todoã«ãã¼ã¿ãå ¥ã TodosController ãã°ã¤ã³ããã«indexãGETããã - ãã°ã¤ã³ãã¼ã¸ã«ãã°ã¤ã³ãã¼ã¸ã«ãªãã¤ã¬ã¯ããã Finished in 0.196078 seconds 5 examples, 0 failures
ã¢ãã¯ãã¹ã¿ãã使ã£ã¦ã¿ã
RSpec ã¯ç°¡åã«ã¢ãã¯(Mock)ãã¹ã¿ã(stub)ãã³ã¼ããæ¸ããã«ç°¡åã«ä½¿ããããã«ãªã£ã¦ãã¾ããã¨ã¦ãRubyãããã¡ã¿ããã°ã©ãã³ã°ã§ããï¼
ã¢ãã¯ãã¹ã¿ãã使ãã¨ã¢ãã«(Model)ã®APIãã¹ã¿ãã§ç½®ãæãã¦ãã¾ãã¨ã³ã³ããã¼ã©ã¼ã ãã®/ã ãã§ãã¹ããæ¸ãã¾ãã
ä¾ãã°
Todo.stub!(:find).with(:all, anything()).and_return([@todo1, @todo2])
ã¯ãTodo.find(:all, ä»»æã®å¼æ°) ãå¼ã³åºãããã¨ã[@todo1, @todo2] ãæ»ã ã¨å®ç¾©ãã¦ãã¾ãã
ã¾ãã
Todo.should_receive(:find).with("3").and_return(@todo3)
ã¯ãTodo.find("3")ãå¼ã³åºãããäºããã§ãã¯ãã¦ãã¾ãããã®éã«æ»ãå¤ã¯@todo3ã«ãªãã¾ãã
ã¢ãã¯ã使ã£ã RSpec ã¯ä»¥ä¸ã®ããã«ãªãã¾ããã
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') describe TodosController do describe "indexãGETããã" do before(:each) do @todo1 = mock_model(Todo) @todo2 = mock_model(Todo) Todo.stub!(:find).with(:all, anything()).and_return([@todo1, @todo2]) session[:login] = true get :index end it "æåãã" do response.should be_success end it "todosã«ãã¼ã¿ãå ¥ã" do assigns[:todos].should eql([@todo1, @todo2]) end end describe "showãid=3ã§GETããã" do before(:each) do @todo3 = mock_model(Todo) Todo.should_receive(:find).with("3").and_return(@todo3) session[:login] = true get :show, :id =>3 end it "æåãã" do response.should be_success end it "find(3)ãå®è¡ããã" do end it "@todoã«id=3ã®ãã¼ã¿ãå ¥ã" do assigns[:todo].should equal(@todo3) end end describe "ãã°ã¤ã³ããã«indexãGETããã" do before(:each) do @request.session[:login] = nil get :index end it "ãã°ã¤ã³ãã¼ã¸ã«ãã°ã¤ã³ãã¼ã¸ã«ãªãã¤ã¬ã¯ããã" do response.should redirect_to(:controller => 'login', :action => 'index') end end end
èå¯
ã¢ãã¯ãã¹ã¿ãã使ãã¨ã³ã³ããã¼ã©ã ãã§/ã ãã®ãã¹ããå®è¡ã§ãã¾ãããã¢ãã«ã®APIãã¢ãã¯ã»ã¹ã¿ãã§å®ç¾©ããã®ã§ãã¹ãã³ã¼ãã¯ã³ã³ããã¼ã©ã®ã³ã¼ããæèãããã¯ã¤ãããã¯ã¹ãã¹ãã«ãªã£ã¦ãã¾ãã¾ãããããã£ã¦
- ã¡ãªããã¨ãã¦
- ã¢ãã«ãåºæ¥ã¦ãªãã¦ãã³ã³ããã¼ã©ãä½æã§ãã
- ã¢ãã«ã®APIãæ確ã«ã§ãã
- ãã¡ãªããã¨ãã¦
- ã¢ãã¯ã»ã¹ã¿ãå®ç¾©ã§ãã¹ãã³ã¼ããå¢ãã
- ã³ã³ããã¼ã©ã®ã³ã¼ãå¤æ´ã¯ããã¹ãã³ã¼ãã«ç´çµãã
- ã¢ãã¯ã»ã¹ã¿ãã§å®ç¾©ãããã«ã¯ããªãã³ã¼ããèãã¦(æ¸ãã¦)ããã§ãªãã¨é£ãã
Railsã®å ´åã³ã³ããã¼ã©ãã¢ãã«ã¨ãã«ã³ã¼ãã¯å°ãªãã®ã§ãã¢ãã¯ãã¹ã¿ããç©æ¥µçã«ä½¿ã£ã¦ãã¹ããæ¸ãã®ã¯ã³ã¹ããããããããRailsã®è»½å¿«ãªéçºã¹ã¿ã¤ã«ã«ã¯å¿ ãããåããªãã®ã§ã¯ã¨æãã¾ããï¼
ããã§ãå®éã«RSpecã使ã£ã¦ããæ¹ã«è³ªåãã¦ã¿ã¾ãããåçã¯ã
- ã³ã³ããã¼ã©ã ãã§/ã ãã®ãã¹ããå®è¡ã§ããã®ã¯é åã ãã¢ãã¯ãã¹ã¿ããç©æ¥µçã«ä½¿ãã¨ã³ã¼ãã®å¤æ´ã«RSpecã®å¤æ´ãä»ãã¦è¡ããæ¬æ«è»¢åã«ãªã£ã¦ãã¾ã£ãçµé¨ããã
- ãã¸ãã¯ã¯ã¢ãã«ã«ç½®ããã³ã³ããã¼ã©ã¯ãªãã¹ãã·ã³ãã«ã«ãã³ã³ããã¼ã©ã®RSpec(ãã¹ã)ã¯æ¸ãã
- ã¾ããèªåçæãããã³ã¼ãã«RSpec(ãã¹ã)ãæ¸ããããªäºã¯é¿ãã
- ã³ã³ããã¼ã©ã®ãã¹ã㯠cucumber ãselenium ã«ã¾ããã¦ã¯ï¼
ãªã©ã§ããã
ç¶ãã¯ãRailsåå¼·ä¼ï¼ æ±äº¬ç¬¬36å ã§ã»ã»ã»ã»