Bankside 是一个固定装置生成工具。它用于定义测试的固定装置。受到 factory_girl 和 Rosie.js 的启发
Bankside 提供了一个简单的 API 来定义默认属性和选项,允许你改变数据生成方式。
struct Account {
let id: Int
let name: String
init(payload: [String: Any]) {
self.id = payload["id"] as! Int
self.name = payload["name"] as! String
}
}
import Bankside
let AccountFactory = Factory({ Account(payload: $0) })
.sequence("id")
.attr("name", "Walter White")
let walter = AccountFactory.build()
let gustavo = AccountFactory.build(attributes: [
"name": "Gustavo Fridge"
])
为了保持固定装置的 DRY 原则,通过扩展 Factory 类并添加常见或复杂的默认属性是有用的。记得返回 self
以保持 API 可链性。
extension Factory {
func timestamp() -> Self {
func date(options: [String: Any]) {
return NSDate()
}
self.attr("created_at", closure: date)
self.attr("updated_at", closure: date)
return self
}
}
使用中
let AccountFactory = Factory({ Account(payload: $0) })
.sequence("id")
.attr("name", "Walter White")
.timestamps()
我们不尝试检测循环依赖,如果发生这种情况,你将只会遇到堆栈溢出。
要求