## expect()
Use the `expect()` mixin to write an assertion. Pass a value to check, and then a series of language functions. Most assertions also require a final value to compare with.
```scss
@import 'true';
@import 'ocha';
@include test-module('Test Module') {
@include test('Test') {
$value: 5;
@include expect($value to equal 5);
}
}
```
## Language Chains
These functions don't do anything—they just make your assertion more readable.
- `to`
- `be`
- `been`
- `is`
- `which`
- `and`
- `has`
- `have`
- `with`
- `at`
- `of`
- `same`
## Flags
### not
Throw the word `not` in an assertion to check for the opposite result.
Note that, since `not` is a special keyword in Sass, you have to put it in quotes.
```scss
@include expect(5 to 'not' equal 6);
```
### deep
Pair with `equal` or `property` to fully check the contents of a map.
```scss
$map: (
cats: ( dogs: true ),
kittens: false,
);
@include expect($map to have deep property 'cats.dogs');
@include expect($map to deep equal $map);
```
## Comparison
### equal($value)
Check if a value equals `$value`.
```scss
@include expect(5 to equal 5);
@include expect('string' to equal 'string');
```
Add the `deep` flag to check if the contents of an entire map are identical.
```scss
$map: (
cats: ( dogs: true ),
kittens: false,
);
@include expect($map to deep equal $map);
```
### eql($map)
Check if two maps are identical in structure. This is the same as `deep equal`.
```scss
$map: (
cats: ( dogs: true ),
kittens: false,
);
@include expect($map to eql $map);
```
### above($floor)
Check if a value is *greater than* `$floor`.
```scss
@include expect(5 to be above 3);
```
### least($floor)
Check if a value is *greater than or equal to* `$floor`.
```scss
@include expect(5 to be at least 5);
@include expect(10 to be at least 5);
```
### below($floor)
Check if a value is *less than* `$floor`.
```scss
@include expect(5 to be below 3);
```
### most($floor)
Check if a value is *less than or equal to* `$floor`.
```scss
@include expect(5 to be at most 5);
@include expect(10 to be at most 5);
```
### within($floor, $ceiling)
Check if a value is within the range of `$floor` and `$ceiling` (including those values).
```scss
@include expect(5 to be within (0, 10));
```
### closeTo($base, $range)
Check if a value is equal to `$base`, plus or minus `$range`.
```scss
// Can be between 2 and 8
@include expect(7 to be closeTo (5, 3));
```
### oneOf($list)
Check if a value is one of the items in `$list`.
```scss
@include expect(1 to be oneOf (1, 2, 3));
@include expect(5 to be oneOf (1, 2, 3));
```
## Type Comparison
### a($type)
Check if a value has the type of `$type`.
```scss
@include expect(5 to be a number);
@include expect('string' to be a string);
@include expect(#fff to be a color);
@include expect((0, 1, 2) to be a list);
```
### ok
Check if a value is truthy:
- `true`
- A list or map that isn't empty
- A number greater than 0
```scss
@include expect(true to be ok);
```
### true
Check if a value is `true`. Note that this function has to be used with quotes around it, because it's a special keyword in Sass.
```scss
@include expect(true to be 'true');
```
### false
Check if a value is `false`. Note that this function has to be used with quotes around it, because it's a special keyword in Sass.
```scss
@include expect(false to be 'false');
```
### null
Check if a value is `null`. Note that this function has to be used with quotes around it, because it's a special keyword in Sass.
```scss
@include expect(null to be 'null');
```
## Inspection
### lengthOf($length)
Check if a list has a length equal to `$length`.
```scss
$list: (0, 1, 2);
@include expect($list to have lengthOf 3);
```
### length
Check if a list has a length that satisfies a certain criteria. Pair it with `above`, `least`, `below`, `most`, or `within`.
```scss
$list: (0, 1, 2);
@include expect($list to have length above 1);
@include expect($list to have length below 4);
@include expect($list to have length within (0, 5));
```
### empty
Check if a list has a length of 0.
```scss
$list: ();
@include expect($list to be empty);
```
### string($substring)
Check if a string contains `$substring`.
```scss
@include expect('string' to have string 'str');
```
### contain($needle)
Check if a string contains `$needle`, or check if a list contains `$needle`.
```scss
@include expect('string' to contain 'str');
@include expect((one, two) to contain 'one');
```
### include($needle)
Check if a string contains `$needle`, or check if a list contains `$needle`.
```scss
@include expect('string' to include 'str');
@include expect((one, two) to include 'one');
```
### property($property, $value)
Check if a map contains property `$property`, or if a list has an item at the index of `$property`. Optionally, you can check if that property also contains `$value`.
```scss
$map: (
'kittens': 10,
'puppies': 6,
'otters': 4,
);
@include expect($map to have property 'kittens');
@include expect($map to have property ('puppies', 6));
```
Add the `deep` flag to check for a deep property within a map or list. Each map key or list index is separated by a dot.
```scss
$map: (
'kittens': 10,
'puppies': 6,
'otters': 4,
'other': (
'bunnies': 1,
'ocelots': 2,
'evenMore': ('birds', 'penguins', 'turkeys'),
),
);
@include expect($map to have property 'other.bunnies');
@include expect($map to have property ('other.bunnies', 2));
@include expect($map to have property ('other.evenMore.2', 'penguins'));
```
### keys($keys)
If you call `keys` by itself, check if a map contains *every key* within `$keys` and *no other keys*.
```scss
$map: (
one: 'one',
two: 'two',
);
@include expect($map to have keys (one, two));
```
If you call `contain keys`, check if a map contains *every key* within `$keys`. If the map has other keys, that's fine.
```scss
$map: (
one: 'one',
two: 'two',
);
@include expect($map to have keys (one));
```
If you call `any keys`, check if a map contains *any key* within `$keys`.
```scss
$map: (
one: 'one',
two: 'two',
);
@include expect($map to have keys (one, two, three, four));
```
### members($list)
Check if the input list is a superset of `$list`, or that the input list is identical to `$list`;
```scss
$list: (0, 1, 2,);
@include expect($list to have members (0, 1,)); // => true
@include expect($list to have members (0, 1, 2,)); // => true
@include expect($list to have members (0, 3, 5,)); // => false
```