test/
├── unit/ # 模型測試
├── functional/ # 控制器測試
├── integration/ # 整合測試
├── fixtures/ # YAML 測試資料
└── mocks/ # 模擬物件
# test/unit/product_test.rb
require File.dirname(__FILE__) + '/../test_helper'
class ProductTest < Test::Unit::TestCase
fixtures :products
def setup
@product = Product.find(1)
end
def test_truth
assert true
end
end
depot> ruby test/unit/product_test.rb
Loaded suite test/unit/product_test
Started E
Finished in 0.312 seconds.
1) Error:
test_truth(ProductTest): ActiveRecord::StatementInvalid: Mysql::Error: Table 'depot_test.products' doesn't exist: DELETE FROM products
測試資料庫 depot_test 缺少 products 表。
depot> rake clone_structure_to_test
將開發資料庫結構複製到測試資料庫,完成後 depot_test 擁有所有表格。
test/fixtures/products.yml:
# Read about fixtures at https://ar.rubyonrails.org/classes/Fixtures.html
version_control_book:
id: 1
title: Pragmatic Version Control
description: How to use version control
image_url: https://.../sk_svn_small.jpg
price: 29.95
date_available: 2005-01-26 00:00:00
automation_book:
id: 2
title: Pragmatic Project Automation
description: How to automate your project
image_url: https://.../sk_auto_small.jpg
price: 29.95
date_available: 2004-07-01 00:00:00
: 分隔,冒號後必須有一個空格depot> ruby test/unit/product_test.rb
Loaded suite test/unit/product_test
Started .
Finished in 0.063 seconds.
1 tests, 1 assertions, 0 failures, 0 errors
測試通過,資料庫 products 表自動插入兩筆 fixture 資料。
fixtures :products → 載入 products.ymlDELETE FROM products → INSERT fixturesuse_transactional_fixtures)或下一輪前清理version_control_book)可在測試中透過存取方法取得物件