"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
前置條件:
我添加電子郵件以後很有價值我創建了我的初始用戶模型,遵循Jonathan MacDonald的YouTube教程「如何在Windows 7上安裝Ruby on Rails - 第4部分,Ruby o ñRails的」 過程開始於11:00
$ rails generate scaffold user first_name:string last_name:string
$ rake db:migrate
然後在控制檯的沙箱有點玩弄後,我在我的用戶模型按如下步驟在6.3.1添加電子郵件值的哈希密碼從railstutorial組織的電子書:
原始命令:
$ 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' [在'test'中添加電子郵件地址:@ user.email應該創建用戶「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的'/應用/模型/用戶。RB [添加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 P'/應用/視圖/用戶/ _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'變量的代碼(在您的測試中,而不是控制器)?同時向我們展示您的用戶模型(因此我們知道有哪些驗證)。最有可能的問題是,您由於某種原因未能通過驗證,所以用戶沒有被創建......但是對於我們來說,我們需要確認我們需要知道您使用的是什麼信息以及預期的驗證。 –