"User.count" didn't change by 1
значит и как исправить? Ниже приведена командная строка с консоли."User.count" не изменился на 1 - Rails
Вот ошибки, которые я получил от bundle exec rake test
и я ищу способ, чтобы исправить их:
$ bundle exec rake test
Run options: --seed 210
# Running:
.....F...F..
Finished in 1.084264s, 11.0674 runs/s, 13.8343 assertions/s.
1) Failure:
UsersControllerTest#test_should_create_user [app/test/control
lers/users_controller_test.rb:20]:
"User.count" didn't change by 1.
Expected: 3
Actual: 2
2) Failure:
UsersControllerTest#test_should_update_user [app/test/control
lers/users_controller_test.rb:39]:
Expected response to be a <redirect>, but was <200>
12 runs, 15 assertions, 2 failures, 0 errors, 0 skips
И Кроме того, что это "Expected response to be a <redirect>, but was <200>"
значит?
И код ниже, что я работать в этом тесте:
Ниже линии 39 в users_controller_test.rb
37 test "should update user" do
38 patch :update, id: @user, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
39 assert_redirected_to user_path(assigns(:user))
40 end
А вот код в контроллер. Для 1), ниже линии 20 в users_controller_test.rb
19 test "should create user" do
20 assert_difference('User.count') do
21 post :create, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
22 end
Ниже то, что мой users_controller#update
выглядит
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
Pre Условие:
Я добавил электронную почту позже я создал свою первоначальную модель пользователя, следуя учебнику YouTube Джонатана Макдональда «Как установить Ruby on Rails в Windows 7 - Часть 4, Ruby o п Rails» процесса, начиная с 11:00
$ rails generate scaffold user first_name:string last_name:string
$ rake db:migrate
А потом после игры вокруг в песочнице консоли немного, я добавил значение электронной почты в моей модели пользователя с помощью следующего процесса в 6.3.1 хешированного пароля от электронной книги railstutorial ORG в:
Оригинал команды:
$ rails generate migration add_password_digest_to_users password_digest:string
My command to add email value in my user model:
$ rails generate migration add_email_to_users email:string
$ rake db:migarate
, а затем я обновить следующие файлы:
Контроллеры
1) 'MyApp'/приложение/контроллеры/users_controller.rb [добавить: электронная почта в разрешении()]
def user_params
params.require(:user).permit(:first_name, :last_name, :email)
end
2) «MyApp/test/controllers/users_controller_test.rb ' [добавить адрес электронной почты: @ user.email в' test 'должен создать пользователя «do» и «test» должен обновить пользователя «do»]
test "should create user" do
assert_difference('User.count') do
post :create, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
end
# ...
test "should update user" do
patch :update, id: @user, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
assert_redirected_to user_path(assigns(:user))
end
Модели
1) 'MYAPP'/приложение/модели/пользователь.гь [добавить validaates для электронной почты по добавьте эту строку]
validates :email, presence: true, length: { maximum: 255 }
2) 'MyApp'/тест/modles/user_test.rb [добавить значение электронной почты в определении настройки пользователя]
def setup
@user = User.new(first_name: "Example", last_name:"User", email: "[email protected]")
end
[add email validation tasks]
test "email should be present" do
@user.email = " "
assert_not @user.valid?
end
test "email should not be too long" do
@user.email = "a" * 244 + "@example.com"
assert_not @user.valid?
end
Просмотров
1) «myap р '/ приложение/просмотров/пользователей/_form.html.erb [добавить поле для электронной почты]
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
2) 'MyApp'/ приложение/просмотров/пользователей/index.html.erb [ добавить адрес электронной coulmn в таблице]
<td>
<%= user.email %>
</td>
3) 'MyApp'/приложение/просмотров/пользователей/show.html.erb [добавить адрес электронной раздел в пунктах]
<p>
<strong>email:</strong>
<%= @user.email %>
</p>
И затем, когда я бегу bundle exec rake test
, я столкнулся с этой ошибкой, о которой я спросил.
Существует файл под названием users.yml
, и я не думал, что это актуально в начале. Но на самом деле это было вызвано этими неудачами. Поэтому в своем ответе я ссылаюсь на код в этом файле. Я просто не говорю об этом здесь, в моем разделе вопросов, для простоты.
Вы не указали нам код контроллера, который вызвал бы эти сбои. Достаточно сказать, что допущения, изложенные в тесте, не будут реализованы фактическим контроллером, но трудно сделать вывод, почему, не видя сам контроллер. – Makoto
Проверьте журнал/тест.файл журнала – Axxiss
Не могли бы вы предоставить нам все соответствующие коды ваших пользовательских тестов - это включает в себя код, который устанавливает переменную '@ user' (в ваших тестах, а не в контроллере)? Также покажите нам свою модель пользователя (чтобы мы знали, какие проверки есть). Наиболее вероятная проблема заключается в том, что по какой-то причине вы отказываетесь от валидации, поэтому пользователь не создается ... но для нас нужно проверить, что нам нужно знать, какую информацию вы используете, и какие проверки ожидаются. –