Skip to content

Commit 9912d24

Browse files
committed
feat: testing filter
1 parent 61ab4c9 commit 9912d24

File tree

4 files changed

+90
-2
lines changed

4 files changed

+90
-2
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,15 @@ it('shows hello', () => {
6666
})
6767
```
6868

69+
## Examples
70+
71+
* Testing a value in [value-spec.js](cypress/integration/value-spec.js)
72+
* [filter](cypress/src/reverse.js) and [filter-spec.js](cypress/integration/filter-spec.js)
73+
6974
## Notes
7075

76+
* `npm run cy` opens Cypress end-to-end test runner in GUI mode
77+
* `npm test` runs Cypress in headless mode
7178
* `mount` uses [`angular.bootstrap`](https://docs.angularjs.org/api/ng/function/angular.bootstrap) to mount code inside the test iframe.
7279

7380
### Small print

cypress/integration/filter-spec.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/// <reference types="cypress" />
2+
import { mount } from '../..'
3+
import angular from 'angular'
4+
import '../src/reverse'
5+
6+
/* eslint-env mocha */
7+
describe('Filter', () => {
8+
const getFilter$ = () => angular.injector(['ng']).get('$filter')
9+
10+
it('returns $filter', () => {
11+
const $filter = getFilter$()
12+
expect($filter).to.be.a('function')
13+
})
14+
15+
it('returns built-in lowercase filter', () => {
16+
const lowercase = getFilter$()('lowercase')
17+
expect(lowercase).to.be.a('function')
18+
expect(lowercase('FOOBar')).to.equal('foobar')
19+
})
20+
21+
it('has user filter', () => {
22+
// we don't even need to mount module "myReverseFilterApp"
23+
// to get back the reverse filter
24+
const $filter = angular
25+
.injector(['ng', 'myReverseFilterApp'])
26+
.get('$filter')
27+
const reverse = $filter('reverse')
28+
expect(reverse).to.be.a('function')
29+
expect(reverse('foo-')).to.equal('-oof')
30+
expect(reverse('foo-', true)).to.equal('-OOF')
31+
32+
// but we can mount template to see it in action
33+
const template = `<div ng-controller="MyController">
34+
<input ng-model="greeting" type="text"><br>
35+
No filter: {{greeting}}<br>
36+
Reverse: {{greeting|reverse}}<br>
37+
Reverse + uppercase: {{greeting|reverse:true}}<br>
38+
Reverse, filtered in controller: {{filteredGreeting}}<br>
39+
</div>`
40+
mount(template, ['myReverseFilterApp'])
41+
42+
cy.log('checking initial values')
43+
cy.contains('div', 'Reverse: olleh')
44+
cy.contains('div', 'Reverse + uppercase: OLLEH')
45+
46+
cy.log('changing values')
47+
cy
48+
.get('input')
49+
.clear()
50+
.type('Cypress')
51+
cy.contains('div', 'Reverse: sserpyC')
52+
cy.contains('div', 'Reverse + uppercase: SSERPYC')
53+
})
54+
})

cypress/src/reverse.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import angular from 'angular'
2+
3+
// this example comes from https://docs.angularjs.org/guide/filter
4+
angular
5+
.module('myReverseFilterApp', [])
6+
.filter('reverse', function () {
7+
return function (input, uppercase) {
8+
input = input || ''
9+
var out = ''
10+
for (var i = 0; i < input.length; i++) {
11+
out = input.charAt(i) + out
12+
}
13+
// conditional based on optional argument
14+
if (uppercase) {
15+
out = out.toUpperCase()
16+
}
17+
return out
18+
}
19+
})
20+
.controller('MyController', [
21+
'$scope',
22+
'reverseFilter',
23+
function ($scope, reverseFilter) {
24+
$scope.greeting = 'hello'
25+
$scope.filteredGreeting = reverseFilter($scope.greeting)
26+
}
27+
])

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@
6969
"deps": "deps-ok && dependency-check --no-dev .",
7070
"issues": "git-issues",
7171
"license": "license-checker --production --onlyunknown --csv",
72-
"lint": "standard --verbose --fix 'src/*.js' 'cypress/integration/*.js'",
72+
"lint": "standard --verbose --fix 'src/*.js' 'cypress/**/*.js'",
7373
"prelint": "npm run pretty",
7474
"pretest": "npm run lint",
75-
"pretty": "prettier-standard 'src/*.js' 'cypress/integration/*.js'",
75+
"pretty": "prettier-standard 'src/*.js' 'cypress/**/*.js'",
7676
"secure": "nsp check",
7777
"size": "t=\"$(npm pack .)\"; wc -c \"${t}\"; tar tvf \"${t}\"; rm \"${t}\";",
7878
"test": "cypress run",

0 commit comments

Comments
 (0)