import Quick
import Nimble
class SortSpec: QuickSpec {
override func spec() {
describe("sorting integers") {
var values: [Int] = []
beforeEach {
values = [2, 5, 3]
}
it("reorders smaller integers first in the array") {
sort(&values)
expect(values).to(equal([2, 3, 5]))
}
}
}
}
Slide 13
Slide 13 text
describe("viewing the list of numbers") {
it("makes a request for random numbers”) {}
it("shows a spinner") {}
context("when the service responds with the numbers") {
it("hides the spinner") {}
it("should display the first number to the user”) {}
describe("tapping on the ‘roll’ button”) {
it("should add the next random number to the top of the list”) {}
}
describe("tapping on a randomly generated number") {
it("should push the a detail controller on the nav stack”) {}
}
}
}
describe("RandomClient") {
var client: RandomClient!, fakeHTTPClient: FakeHTTPClient!
beforeEach {
fakeHTTPClient = FakeHTTPClient()
client = RandomClient(httpClient: fakeHTTPClient, apiKey: "my-api-key")
}
describe("requesting a random number between 0 and 100") {
var number: Int?, error: NSError?
beforeEach {
client.randomInteger { n, err in
number = n
error = err
}
}
it("should make an HTTP request") {
var lastRequest = fakeHTTPClient.recordedRequests.last!
expect(lastRequest.request.URL?.absoluteString).to(
equal("https://api.random.org/json-rpc/1/invoke"))
}
// ...
}
}
Assert(forAll(array(positiveInteger())) { numbers in
var nums = customSort(numbers as! [Int])
var n = 0
for i in 0.. nums[i] {
return false
}
n = nums[i]
}
return true
})
Slide 49
Slide 49 text
Assert(forAll(array(positiveInteger())) { numbers in
var nums = customSort(numbers as! [Int])
var n = 0
for i in 0.. nums[i] {
return false
}
n = nums[i]
}
return true
})
func customSort(array: [T]) -> [T] {
var items = sorted(array)
if items.count == 3 {
let t = items[0]
items[0] = items[2]
items[2] = t
}
return items
}
Assert(forAll(array(positiveInteger())) { numbers in
var nums = customSort(numbers as! [Int])
var n = 0
for i in 0.. nums[i] {
return false
}
n = nums[i]
}
return true
})
failed - Property failed with: (0, 0, 1)
Slide 54
Slide 54 text
State
Slide 55
Slide 55 text
State
Can you describe state as values?
Slide 56
Slide 56 text
State Machine
Slide 57
Slide 57 text
No content
Slide 58
Slide 58 text
Model State Transitions
Slide 59
Slide 59 text
Model State Tran
User-state
In Memory
Slide 60
Slide 60 text
Model State Tran
Active Requests
Received Numbers
User-state
In Memory
Slide 61
Slide 61 text
te Transitions
uests
mbers
precondition
acting on the subject
model state change
postcondition (assertions)
Slide 62
Slide 62 text
te Transitions
uests
mbers
Roll
Resolve Request
precondition
acting on the subject
model state change
postcondition (assertions)
Slide 63
Slide 63 text
te Transitions
uests
mbers
Roll
Resolve Request
No precondition
Tapping button
Add active request
Is spinner visible?
Slide 64
Slide 64 text
te Transitions
uests
mbers
Roll
Resolve Request
At least one active request
Resolve HTTP Response
Remove active request
Is spinner visible?