[英]minitest controller testing failure
我在用minitest測試控制器時遇到了麻煩。 在以下情況下,我的問題-嘗試刪除記錄時。 控制器只是命名空間admin
基本支架,但測試如下:
require 'test_helper'
describe Admin::ProvidersController do
let(:provider) { FactoryGirl.create(:provider) }
it "gets index" do
get :index
assert_response :success
assert_not_nil assigns(:providers)
end
it "gets new" do
get :new
assert_response :success
end
it "creates provider" do
assert_difference('Provider.count') do
post :create, provider: { description: 'Description', name: 'Name' }
end
assert_redirected_to admin_provider_path(assigns(:provider))
end
it "shows provider" do
get :show, id: provider
assert_response :success
end
it "gets edit" do
get :edit, id: provider
assert_response :success
end
it "updates provider" do
put :update, id: provider, provider: { description: 'New description', name: 'New name' }
assert_redirected_to admin_provider_path(assigns(:provider))
end
it "destroys provider" do
assert_difference('Provider.count', -1, 'An Provider should be destroyed') do
delete :destroy, id: provider
end
assert_redirected_to admin_providers_path
end
end
在rake test:controllers
我看到:
Started
Admin::ProvidersController
test_0001_gets index PASS (0.12s)
test_0002_gets new PASS (0.17s)
test_0003_creates provider PASS (0.01s)
test_0004_shows provider PASS (0.04s)
test_0005_gets edit PASS (0.05s)
test_0006_updates provider PASS (0.01s)
0
0
test_0007_destroys provider FAIL (0.02s)
Minitest::Assertion: An Provider should be destroyed.
"Provider.count" didn't change by -1.
Expected: -1
Actual: 0
/Users/alec/.rvm/gems/ruby-2.1.1@lorgnette/gems/activesupport-4.1.1/lib/active_support/testing/assertions.rb:76:in `block in assert_difference'
/Users/alec/.rvm/gems/ruby-2.1.1@lorgnette/gems/activesupport-4.1.1/lib/active_support/testing/assertions.rb:73:in `each'
/Users/alec/.rvm/gems/ruby-2.1.1@lorgnette/gems/activesupport-4.1.1/lib/active_support/testing/assertions.rb:73:in `each_with_index'
/Users/alec/.rvm/gems/ruby-2.1.1@lorgnette/gems/activesupport-4.1.1/lib/active_support/testing/assertions.rb:73:in `assert_difference'
/Users/alec/Documents/Projects/RubyApps/lorgnette/test/controllers/admin/providers_controller_test.rb:42:in `block (2 levels) in <top (required)>'
Fabulous run in 0.43316s
7 tests, 11 assertions, 1 failures, 0 errors, 0 skips
在日志中,我看到:
-------------------------------------------------------
Admin::ProvidersController: test_0007_destroys provider
-------------------------------------------------------
(0.4ms) SELECT COUNT(*) FROM "providers"
(0.3ms) SELECT COUNT(*) FROM "providers"
(0.2ms) SAVEPOINT active_record_1
SQL (0.4ms) INSERT INTO "providers" ("created_at", "description", "name", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", "2014-05-30 23:06:43.102303"], ["description", "MyText"], ["name", "MyString"], ["updated_at", "2014-05-30 23:06:43.102303"]]
(0.2ms) RELEASE SAVEPOINT active_record_1
Processing by Admin::ProvidersController#destroy as HTML
Parameters: {"id"=>"271"}
Provider Load (0.4ms) SELECT "providers".* FROM "providers" WHERE "providers"."id" = $1 LIMIT 1 [["id", 271]]
(0.2ms) SAVEPOINT active_record_1
SQL (0.3ms) DELETE FROM "providers" WHERE "providers"."id" = $1 [["id", 271]]
(0.1ms) RELEASE SAVEPOINT active_record_1
Redirected to http://test.host/admin/providers
Completed 302 Found in 3ms (ActiveRecord: 0.9ms)
(0.3ms) SELECT COUNT(*) FROM "providers"
(0.2ms) SELECT COUNT(*) FROM "providers"
(0.5ms) ROLLBACK
刪除測試有什么問題?
是的,因為在您assert_difference提供程序計數為零時,引用“ id:provider”時,提供程序計數會增加,然后銷毀會減少提供程序計數。 因此,它從零開始,到零結束。
試試這個...
it "destroys provider" do
provider
assert_difference('Provider.count', -1, 'An Provider should be destroyed') do
delete :destroy, id: provider
end
end
這樣,可以在assert_difference塊之前實例化提供程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.