2011-04-20 3 views
0

Я играю с рельсами 3.0.6 с рубином 1.9.2, приложение работает в браузере, но не в тестировании ..не в состоянии проверить создать действие

1) Я создал новое приложение рельсы на «рельсы новый MyApp»

2) Создание эшафот "рельсы генерировать эшафот имя пользователя: строка hashed_password: строка соли: строка"

3) после этого я изменил users_controller немного

# POST /users 
    # POST /users.xml 
    def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     // change @user to usrs_url 
     format.html { redirect_to(users_url, :notice => "User #{@user.username} was successfully created.") } 
     format.xml { render :xml => @user, :status => :created, :location => @user } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /users/1 
    # PUT /users/1.xml 
    def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     // change @user to usrs_url 
     format.html { redirect_to(users_url, :notice => "User #{@user.username} was successfully updated.") } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

4), так что я пытаюсь изменить тесты, а также:

setup do 
    @input_attributes = { 
     :username    => '[email protected]', 
     :password    => 'secret', 
     :password_confirmation => 'secret' 
    } 

    @user = users(:one) 
    end 

    test "should create user" do 
    assert_difference('User.count') do 
     post :create, :user => @input_attributes 
    end 

    assert_redirected_to users_path 
    end 

    test "should update user" do 
    put :update, :id => @user.to_param, :user => @input_attributes 
    assert_redirected_to users_path 
    end 

Но создавать и тесты обновления не удалось

Может кто-нибудь, дайте мне знать то, что я сделал не так?

Благодаря

Loaded suite C:/Ruby192/lib/ruby/1.9.1/rake/rake_test_loader 
Started 
F.....F 
Finished in 5.628874 seconds. 

    1) Failure: 
test_should_create_user(UsersControllerTest) [test/functional/users_controller_test.rb:26]: 
"User.count" didn't change by 1. 
<3> expected but was 
<2>. 

    2) Failure: 
test_should_update_user(UsersControllerTest) [test/functional/users_controller_test.rb:45]: 
Expected block to return true value. 

7 tests, 9 assertions, 2 failures, 0 errors, 0 skips 



require 'digest/sha2' 
class User < ActiveRecord::Base 
    validates :username, :presence => true, :uniqueness => true 

    validates_format_of :username, :with => /\A^[^\r\[email protected] ][^\r\[email protected] ][email protected][^\r\[email protected] ]+[.][^\r\[email protected] ]+$\Z/i 

    #password is a fake field 
    validates :password, :confirmation => true 
    validate :password_must_be_present 

    attr_accessor :password_confirmation 
    attr_reader :password 

    def password=(password) 
     if password.present? 
      generate_salt 
      self.hashed_password = self.class.encrypt_password(password, salt) 
     end 
    end 

    class << self 
     def encrypt_password(password, salt) 
      Digest::SHA2.hexdigest(password + "shrimpy" + salt) 
     end 

     def authenticate(username, password) 
      if user = find_by_username(username) 
       if user.hashed_password == encrypt_password(password, user.salt) 
        user 
       end 
      end 
     end 
    end 

    private 
     def password_must_be_present 
      errors.add(:password, "Missing password") unless hashed_password.present? 
     end 

     def generate_salt 
      self.salt = self.object_id.to_s + rand.to_s 
     end 
end 

ответ

3

assert_redirected_to user_path вырождена. Вероятно, у вас даже нет единственного заданного маршрута ресурса user. Что вы хотите, вероятно, assert_redirected_to users_path с множественным числом пользователей.

+0

Вы правы ... какой острый глаз. моя ошибка опечатки .... предполагалось, что это user_path ... я исправил ее ... но проблема все еще существовала..не удалось пропустить тесты – jojo

+0

@shrimpy: Похоже, вы смешиваете и сопоставляете 'users_path' и' users_url'. Я не знаю точно, но я уверен, вы 'assert_redirected_to' просто сравниваете вывод строк из' url_for', так как у него нет контекста имени request/hostname для создания полного URL-адреса из пути. Дайте ему шанс ... это стоит того или другого. – coreyward

+0

он не работает для меня .... обратно в сообщение об ошибке, он жалуется, что не смог сохранить запись и запись в базу данных .... но я использовал sqlite3 ... hmm..shouldn't be a проблема ..... confused ... – jojo

Смежные вопросы