Skip to content

Commit 3248de5

Browse files
committed
add initial ember-cli-addon tests
1 parent c7d4f92 commit 3248de5

File tree

5 files changed

+256
-15
lines changed

5 files changed

+256
-15
lines changed

node-tests/addon-tests/addon-test.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
'use strict';
2+
const expect = require('chai').expect;
3+
const denodeify = require('denodeify');
4+
const request = denodeify(require('request'));
5+
const AddonTestApp = require('ember-cli-addon-tests').AddonTestApp;
6+
const esprima = require('esprima');
7+
8+
describe('ember-cli-addon-tests (slow)', function() {
9+
this.timeout(600000);
10+
11+
let app;
12+
13+
before(function() {
14+
app = new AddonTestApp();
15+
let appCreateOptions = {
16+
fixturesPath: 'node-tests/addon-tests/fixtures/'
17+
}
18+
return app.create('ts1', appCreateOptions)
19+
.then(() => {
20+
return app.run('npm', 'install');
21+
})
22+
.then(function() {
23+
return app.startServer();
24+
});
25+
});
26+
27+
after(function() {
28+
return app.stopServer();
29+
});
30+
31+
it('transpiles pre-existing typescript files', function() {
32+
return request('http://localhost:49741/assets/ts1.js')
33+
.then(response => {
34+
expect(response.statusCode).to.equal(200);
35+
36+
let moduleBody = extractModuleBody(response.body, 'ts1/add');
37+
assertModuleBody(moduleBody, `
38+
"use strict";
39+
40+
Object.defineProperty(exports, "__esModule", {
41+
value: true
42+
});
43+
exports.add = add;
44+
function add(a, b) {
45+
return a + b;
46+
}
47+
`);
48+
});
49+
});
50+
});
51+
52+
function extractModuleBody(responseJs, moduleName) {
53+
let parsed = esprima.parseScript(responseJs);
54+
return parsed.body
55+
.filter((s) => {
56+
return s.type === 'ExpressionStatement';
57+
})
58+
.map((s) => s.expression)
59+
.filter((s) =>
60+
s.type === 'CallExpression' &&
61+
s.callee.type === 'Identifier' &&
62+
s.callee.name === 'define' &&
63+
s.arguments &&
64+
s.arguments[0] &&
65+
s.arguments[0].type === 'Literal' &&
66+
s.arguments[0].value === moduleName)
67+
.map((s) => s.arguments[2].body)[0];
68+
}
69+
70+
function assertModuleBody(actualParsed, expectedJs) {
71+
let expectedParsed = esprima.parseScript(expectedJs);
72+
expect(actualParsed.body).to.deep.equal(expectedParsed.body);
73+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function add(a: number, b: number): number {
2+
return a + b;
3+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es2017",
4+
"allowJs": true,
5+
"moduleResolution": "node",
6+
"allowSyntheticDefaultImports": true,
7+
"noImplicitThis": true,
8+
"noEmitOnError": false,
9+
"noEmit": true,
10+
"inlineSourceMap": true,
11+
"inlineSources": true,
12+
"baseUrl": ".",
13+
"module": "es6",
14+
"paths": {
15+
"ts1/tests/*": [
16+
"tests/*"
17+
],
18+
"ts1/*": [
19+
"app/*",
20+
"lib/header-additions/app/*",
21+
"lib/test-shims/app/*"
22+
],
23+
"header-additions": [
24+
"lib/header-additions/addon"
25+
],
26+
"header-additions/*": [
27+
"lib/header-additions/addon/*"
28+
],
29+
"test-shims": [
30+
"lib/test-shims/addon"
31+
],
32+
"test-shims/*": [
33+
"lib/test-shims/addon/*"
34+
],
35+
"*": [
36+
"types/*"
37+
]
38+
}
39+
},
40+
"include": [
41+
"app",
42+
"tests",
43+
"types",
44+
"lib/header-additions",
45+
"lib/test-shims"
46+
]
47+
}

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@
6666
"@types/node": "*",
6767
"@types/qunit": "^2.0.31",
6868
"broccoli-asset-rev": "^2.6.0",
69+
"chai": "^4.1.2",
70+
"denodeify": "^1.2.1",
6971
"ember-cli": "~2.18.2",
72+
"ember-cli-addon-tests": "^0.11.0",
7073
"ember-cli-app-version": "^3.1.3",
7174
"ember-cli-babel": "^6.6.0",
7275
"ember-cli-blueprint-test-helpers": "^0.18.3",
@@ -89,8 +92,10 @@
8992
"eslint": "^4.17.0",
9093
"eslint-plugin-ember": "^5.0.3",
9194
"eslint-plugin-node": "^6.0.0",
95+
"esprima": "^4.0.0",
9296
"loader.js": "^4.2.3",
9397
"mocha": "^5.0.0",
98+
"request": "^2.85.0",
9499
"testdouble": "^3.5.0",
95100
"typescript": "^2.7.2"
96101
},

0 commit comments

Comments
 (0)