2014-04-18 12 views
5

Przede wszystkim jestem nowy w udawanym/odgałęzienie, i mam problemy z szyderczy/stubbingKłopot w wyśmianie bazy danych i niedopałek: zapisz

To jest mój kod aplikacji:

describe 'Register an User' do 
    VALID_USERNAME = "..." 
    VALID_PASSWORD = "..." 
    VALID_USER = User.new(VALID_USERNAME, VALID_PASSWORD) 

    before (:each) do 
     User.any_instance.stub(:save).and_return(true) 
    end 

    it 'should create a new user' do 
     post :create, :username => VALID_USERNAME, :password => VALID_PASSWORD 
     expect(response.status).to eq(201) 
     #user_inserted = ... 
     #expect(user_inserted).to eq(VALID_USER) 
    end 
end 

Oraz:

def create 
     username = params[:username] 
     password = params[:password] 
     if not username or not password 
      render :json => '', :status => 400 
     else 
      success = User.new(username, password).save 
      if success 
       render :json => '', :status => 201 
      else 
       render :json => '', :status => 500 
      end 
     end 
    end 

Próbuję zrobić próbę ActiveRecord, aby przetestować "tworzenie", bez potrzeby testowania "get". Idea jest taka, że ​​kiedy wywołuję "user.save", można zapisać użytkownika bez korzystania z bazy danych, a następnie mam dostęp w moim przypadku testowym, więc gwarantuję, że użytkownik został "włożony" do mojej bazy danych.

Jeśli przeprowadzę test, to przejdzie, ale nie sprawdzam, co chcę zrobić. Jakaś pomoc lub pomysł?

Dzięki!

+0

Co to jest "User.new (VALID_USERNAME, VALID_PASSWORD)"? Czy metoda 'new' jest metodą niestandardową? Jeśli tak, to co powraca? Zwróć uwagę, że ['new'] (http://api.rubyonrails.org/classes/ActiveModel/Model.html#method-c-new) z ActiveRecord akceptuje hash – gotva

Odpowiedz

1

To nie ma sensu, ponieważ nie można przetestować wstawiania w bazie danych bez wstawiania do bazy danych. Czemu?

Szyny zawiera wbudowane sprawdzania poprawności, które stają się pierwszym krokiem do zapisania elementu. Jeśli sprawdzanie poprawności zakończy się pomyślnie, element zostanie wstawiony do bazy danych przez ActiveRecord. Sprawdzanie poprawności bazy danych rozpocznie się na tym etapie, a jeśli wystąpi błąd, zgłoszą wyjątek.

So. Jeśli chcesz przetestować, czy użytkownik może zostać utworzony w bazie danych, dodaj sprawdzenia poprawności do modelu, który pasuje do bazy danych. A następnie będziesz mógł skorzystać z metody is_valid?.

Zapewni to, że użytkownik jest uprawniony do przechowywania w bazie danych. Dzięki temu będziesz mógł z niego korzystać wszędzie, wiedząc, że: user_instance.is_valid? definiuje element do wstawienia.

Mam nadzieję, że właśnie o to pytasz.

Powiązane problemy