Я играю с рельсами 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
Вы правы ... какой острый глаз. моя ошибка опечатки .... предполагалось, что это user_path ... я исправил ее ... но проблема все еще существовала..не удалось пропустить тесты – jojo
@shrimpy: Похоже, вы смешиваете и сопоставляете 'users_path' и' users_url'. Я не знаю точно, но я уверен, вы 'assert_redirected_to' просто сравниваете вывод строк из' url_for', так как у него нет контекста имени request/hostname для создания полного URL-адреса из пути. Дайте ему шанс ... это стоит того или другого. – coreyward
он не работает для меня .... обратно в сообщение об ошибке, он жалуется, что не смог сохранить запись и запись в базу данных .... но я использовал sqlite3 ... hmm..shouldn't be a проблема ..... confused ... – jojo