Commit 69b2897c06beb6168a8bf79e46cf47d31e848177
1 parent
4dc814d9
Exists in
master
and in
35 other branches
npm test now run the tests. sourcemap is working
Showing
7 changed files
with
167 additions
and
71 deletions
Show diff stats
| ... | ... | @@ -0,0 +1,130 @@ |
| 1 | +/* global process, */ | |
| 2 | +'use strict'; | |
| 3 | + | |
| 4 | +var path = require('path'); | |
| 5 | +var conf = require('./gulp/conf'); | |
| 6 | + | |
| 7 | + | |
| 8 | +var _ = require('lodash'); | |
| 9 | +var wiredep = require('wiredep'); | |
| 10 | + | |
| 11 | +var pathSrcHtml = [ | |
| 12 | + path.join(conf.paths.src, '/**/*.html') | |
| 13 | +]; | |
| 14 | + | |
| 15 | +function listFiles() { | |
| 16 | + var wiredepOptions = _.extend({}, conf.wiredep, { | |
| 17 | + dependencies: true, | |
| 18 | + devDependencies: true | |
| 19 | + }); | |
| 20 | + | |
| 21 | + var patterns = [].concat(wiredep(wiredepOptions).js) | |
| 22 | + .concat([ | |
| 23 | + './src/spec.ts' | |
| 24 | + ] | |
| 25 | + ) | |
| 26 | + .concat(pathSrcHtml); | |
| 27 | + | |
| 28 | + var files = patterns.map(function (pattern) { | |
| 29 | + return { | |
| 30 | + pattern: pattern | |
| 31 | + }; | |
| 32 | + }); | |
| 33 | + files.push({ | |
| 34 | + pattern: path.join(conf.paths.src, '/assets/**/*'), | |
| 35 | + included: false, | |
| 36 | + served: true, | |
| 37 | + watched: false | |
| 38 | + }); | |
| 39 | + return files; | |
| 40 | +} | |
| 41 | + | |
| 42 | +var webpackConfig = require("./webpack.config.js"); | |
| 43 | + | |
| 44 | +module.exports = function (config) { | |
| 45 | + | |
| 46 | + var configuration = { | |
| 47 | + files: listFiles(), | |
| 48 | + | |
| 49 | + singleRun: false, | |
| 50 | + | |
| 51 | + autoWatch: true, | |
| 52 | + colors: true, | |
| 53 | + | |
| 54 | + logLevel: config.LOG_INFO, | |
| 55 | + | |
| 56 | + ngHtml2JsPreprocessor: { | |
| 57 | + stripPrefix: conf.paths.src + '/', | |
| 58 | + moduleName: 'angular' | |
| 59 | + }, | |
| 60 | + | |
| 61 | + | |
| 62 | + frameworks: ['jasmine', 'phantomjs-shim'],//, 'angular-filesort'], | |
| 63 | + | |
| 64 | + angularFilesort: { | |
| 65 | + whitelist: [path.join(conf.paths.src, '/**/!(*.html|*.spec|*.mock).js')] | |
| 66 | + }, | |
| 67 | + | |
| 68 | + browsers: ['PhantomJS'], | |
| 69 | + | |
| 70 | + webpack: _.merge({ | |
| 71 | + | |
| 72 | + }, webpackConfig, { | |
| 73 | + devtool: 'inline-source-map' | |
| 74 | + }), | |
| 75 | + webpackServer: { | |
| 76 | + quite: true | |
| 77 | + }, | |
| 78 | + plugins: [ | |
| 79 | + 'karma-chrome-launcher', | |
| 80 | + 'karma-phantomjs-launcher', | |
| 81 | + 'karma-angular-filesort', | |
| 82 | + 'karma-webpack', | |
| 83 | + 'karma-phantomjs-shim', | |
| 84 | + 'karma-coverage', | |
| 85 | + 'karma-jasmine', | |
| 86 | + 'karma-spec-reporter', | |
| 87 | + 'karma-ng-html2js-preprocessor', | |
| 88 | + 'karma-sourcemap-loader' | |
| 89 | + ], | |
| 90 | + | |
| 91 | + coverageReporter: { | |
| 92 | + type: 'html', | |
| 93 | + dir: 'coverage/' | |
| 94 | + }, | |
| 95 | + | |
| 96 | + reporters: ['spec', "coverage"], | |
| 97 | + | |
| 98 | + proxies: { | |
| 99 | + '/assets/': path.join('/base/', conf.paths.src, '/assets/') | |
| 100 | + } | |
| 101 | + }; | |
| 102 | + | |
| 103 | + // This is the default preprocessors configuration for a usage with Karma cli | |
| 104 | + // The coverage preprocessor is added in gulp/unit-test.js only for single tests | |
| 105 | + // It was not possible to do it there because karma doesn't let us now if we are | |
| 106 | + // running a single test or not | |
| 107 | + configuration.preprocessors = { | |
| 108 | + 'src/**/*.ts': ['webpack','sourcemap'] | |
| 109 | + }; | |
| 110 | + | |
| 111 | + pathSrcHtml.forEach(function (path) { | |
| 112 | + configuration.preprocessors[path] = ['ng-html2js']; | |
| 113 | + }); | |
| 114 | + | |
| 115 | + // This block is needed to execute Chrome on Travis | |
| 116 | + // If you ever plan to use Chrome and Travis, you can keep it | |
| 117 | + // If not, you can safely remove it | |
| 118 | + // https://github.com/karma-runner/karma/issues/1144#issuecomment-53633076 | |
| 119 | + if (configuration.browsers[0] === 'Chrome' && process.env.TRAVIS) { | |
| 120 | + configuration.customLaunchers = { | |
| 121 | + 'chrome-travis-ci': { | |
| 122 | + base: 'Chrome', | |
| 123 | + flags: ['--no-sandbox'] | |
| 124 | + } | |
| 125 | + }; | |
| 126 | + configuration.browsers = ['chrome-travis-ci']; | |
| 127 | + } | |
| 128 | + | |
| 129 | + config.set(configuration); | |
| 130 | +}; | ... | ... |
karma.conf.js
| ... | ... | @@ -12,6 +12,9 @@ var pathSrcHtml = [ |
| 12 | 12 | path.join(conf.paths.src, '/**/*.html') |
| 13 | 13 | ]; |
| 14 | 14 | |
| 15 | +var glob = require("glob"); | |
| 16 | +var testFiles = glob.sync("./src/**/*.[sS]pec.ts"); | |
| 17 | + | |
| 15 | 18 | function listFiles() { |
| 16 | 19 | var wiredepOptions = _.extend({}, conf.wiredep, { |
| 17 | 20 | dependencies: true, |
| ... | ... | @@ -20,15 +23,19 @@ function listFiles() { |
| 20 | 23 | |
| 21 | 24 | var patterns = [].concat(wiredep(wiredepOptions).js) |
| 22 | 25 | .concat([ |
| 26 | + './src/noosfero-specs.js' | |
| 27 | + ] | |
| 28 | + //[ | |
| 23 | 29 | //path.join(conf.paths.src, 'common.js'), |
| 24 | 30 | //, path.join(conf.paths.src, 'index.ts') |
| 25 | - path.join(conf.paths.src, 'test.js') | |
| 31 | + //path.join(conf.paths.src, 'test.js') | |
| 26 | 32 | // path.join(conf.paths.src, '/app/**/*.module.js'), |
| 27 | 33 | // path.join(conf.paths.src, '/app/**/*.js'), |
| 28 | 34 | // path.join(conf.paths.src, '/**/*.spec.js'), |
| 29 | 35 | // path.join(conf.paths.src, '/**/*.mock.js') |
| 30 | 36 | |
| 31 | - ]) | |
| 37 | + //] | |
| 38 | + ) | |
| 32 | 39 | .concat(pathSrcHtml); |
| 33 | 40 | |
| 34 | 41 | var files = patterns.map(function (pattern) { |
| ... | ... | @@ -78,16 +85,16 @@ module.exports = function (config) { |
| 78 | 85 | |
| 79 | 86 | browsers: ['PhantomJS'], |
| 80 | 87 | |
| 81 | - webpack2: _.merge({ | |
| 88 | + /* webpack: _.merge({ | |
| 82 | 89 | |
| 83 | 90 | }, webpackConfig, { |
| 84 | - /*devtool: 'cheap-module-source-map'*/ | |
| 91 | + devtool: 'inline-source-map' | |
| 85 | 92 | }), |
| 86 | 93 | webpackServer: { |
| 87 | 94 | quite: true |
| 88 | - }, | |
| 95 | + },*/ | |
| 89 | 96 | plugins: [ |
| 90 | - require('karma-webpack'), | |
| 97 | +// require('karma-webpack'), | |
| 91 | 98 | 'karma-chrome-launcher', |
| 92 | 99 | 'karma-phantomjs-launcher', |
| 93 | 100 | 'karma-angular-filesort', |
| ... | ... | @@ -116,8 +123,9 @@ module.exports = function (config) { |
| 116 | 123 | // The coverage preprocessor is added in gulp/unit-test.js only for single tests |
| 117 | 124 | // It was not possible to do it there because karma doesn't let us now if we are |
| 118 | 125 | // running a single test or not |
| 119 | - configuration.preprocessors = {} | |
| 120 | - // 'src/**/*.ts': ['sourcemap'], | |
| 126 | + configuration.preprocessors = { | |
| 127 | + 'src/**/*.js': ['sourcemap'] | |
| 128 | + }; | |
| 121 | 129 | // 'src/**/*.js': ['sourcemap'], |
| 122 | 130 | // 'src/**/*.[sS]pec.ts': ['sourcemap'] |
| 123 | 131 | // }; | ... | ... |
package.json
src/app/components/noosfero-articles/article/article.directive.spec.ts
| 1 | -// let oldDefine = Object.defineProperties; | |
| 2 | -// | |
| 3 | -// Object.defineProperties = function(object, properties){ | |
| 4 | -// let filteredProps = {}; | |
| 5 | -// let currentProperties = Object.getOwnPropertyNames(object); | |
| 6 | -// for (let i = 0; i < currentProperties.length; i++) { | |
| 7 | -// let prop = currentProperties[i]; | |
| 8 | -// if(currentProperties.indexOf(prop) < 0){ | |
| 9 | -// filteredProps[prop] = properties[prop]; | |
| 10 | -// } | |
| 11 | -// } | |
| 12 | -// oldDefine(object, <any>filteredProps); | |
| 13 | -// }; | |
| 14 | - | |
| 15 | 1 | import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builder'; |
| 16 | 2 | import {Input, provide, Component} from 'ng-forward'; |
| 17 | 3 | |
| 18 | 4 | import {ArticleDirective} from './article.directive'; |
| 19 | 5 | |
| 20 | - | |
| 21 | - | |
| 22 | - | |
| 23 | - | |
| 24 | - | |
| 25 | 6 | // Instantiate the Builder, this part is different than ng2. |
| 26 | 7 | // In ng2 you inject tcb. |
| 27 | 8 | const tcb = new TestComponentBuilder(); |
| 28 | 9 | |
| 29 | 10 | |
| 30 | -// Create your test bed | |
| 11 | +// Create a component to include your testing component | |
| 31 | 12 | @Component({ selector: 'my-test' , template: '<hr />'}) |
| 32 | 13 | class TestArticleDirective { |
| 33 | 14 | article = { type: 'TinyMceArticle' }; |
| 34 | 15 | profile = { name: 'profile-name' }; |
| 35 | 16 | constructor(){ |
| 36 | - | |
| 37 | 17 | } |
| 38 | 18 | } |
| 39 | 19 | |
| 40 | 20 | |
| 41 | - | |
| 42 | 21 | describe("Article Directive", () => { |
| 43 | - it("does something", done => { | |
| 22 | + it("receives the article and profile as inputs", done => { | |
| 44 | 23 | let html = '<noosfero-article [article]="ctr.article" [profile]="ctrl.profile"></noosfero-article>'; |
| 45 | 24 | tcb |
| 46 | 25 | .overrideTemplate(TestArticleDirective, html) |
| ... | ... | @@ -53,39 +32,4 @@ describe("Article Directive", () => { |
| 53 | 32 | }); |
| 54 | 33 | }); |
| 55 | 34 | |
| 56 | - // let html = '<noosfero-article [profile]=profile [artcile]=article></noosfero-article>'; | |
| 57 | - | |
| 58 | - // let noosferoApp: ng.IModule; | |
| 59 | - // let articleDirective: ArticleDirective; | |
| 60 | - // let $scope: ng.IScope; | |
| 61 | - // let element: ng.IAugmentedJQuery; | |
| 62 | - // beforeEach(angular.mock.module("noosferoApp")); | |
| 63 | - | |
| 64 | - // beforeEach(inject(function($controller: ng.IControllerService, $injector: ng.auto.IInjectorService, $rootScope, $q, $compile, $location, toastr) { | |
| 65 | - // let routeParams = {}; | |
| 66 | - // let $scope: ng.IScope = $rootScope.$new(); | |
| 67 | - // (<any>$scope).ctrl = { | |
| 68 | - // article: { | |
| 69 | - // type: 'article' | |
| 70 | - // }, | |
| 71 | - // profile: { } | |
| 72 | - // }; | |
| 73 | - // element = getCompiledElement($scope, $compile); | |
| 74 | - // //let element = angular.element('<noosfero-article article="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'); | |
| 75 | - // //articleDirective = new ArticleDirective(element, $scope, $injector, $compile); | |
| 76 | - // console.log(articleDirective); | |
| 77 | - // })); | |
| 78 | - | |
| 79 | - // it("renders accordly the article type", (done) => { | |
| 80 | - // expect(1 + 1).toEqual(2); | |
| 81 | - // console.log(noosferoApp); | |
| 82 | - // done(); | |
| 83 | - // }); | |
| 84 | - | |
| 85 | - // function getCompiledElement($scope, $compile) { | |
| 86 | - // let element = angular.element('<noosfero-article [article]="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'); | |
| 87 | - // let compiledElement = $compile(element)($scope); | |
| 88 | - // $scope.$digest(); | |
| 89 | - // return compiledElement; | |
| 90 | - // } | |
| 91 | 35 | }); |
| 92 | 36 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | + | |
| 2 | +require("core-js/shim"); | |
| 3 | +require("reflect-metadata"); | |
| 4 | +require("ng-forward"); | |
| 5 | + | |
| 6 | + | |
| 7 | +// require all spec files | |
| 8 | +requireAll((<any>require).context("./", true, /spec.ts$/)); | |
| 9 | +function requireAll(r: any): any { | |
| 10 | + r.keys().forEach(r); | |
| 11 | +} | |
| 0 | 12 | \ No newline at end of file | ... | ... |
tsconfig.json
| ... | ... | @@ -3,13 +3,14 @@ |
| 3 | 3 | "module": "commonjs", |
| 4 | 4 | "target": "es5", |
| 5 | 5 | "noImplicitAny": false, |
| 6 | - "sourceMap": false, | |
| 6 | + "sourceMap": true, | |
| 7 | 7 | "experimentalDecorators": true |
| 8 | 8 | }, |
| 9 | 9 | "exclude": [ |
| 10 | 10 | "node_modules", |
| 11 | 11 | "typings/main", |
| 12 | - "typings/main.d.ts" | |
| 12 | + "typings/main.d.ts", | |
| 13 | + "node_modules/ng-forward/cjs/util/jqlite-extensions.d.ts" | |
| 13 | 14 | ], |
| 14 | 15 | "compileOnSave": false, |
| 15 | 16 | "atom": { | ... | ... |
webpack.config.js
| ... | ... | @@ -10,6 +10,8 @@ if (argv.production) { |
| 10 | 10 | extension = ".min.js" |
| 11 | 11 | } |
| 12 | 12 | |
| 13 | +var testFiles = glob.sync("./src/**/*.[sS]pec.ts"); | |
| 14 | + | |
| 13 | 15 | var uglifyLoaderConfig = { |
| 14 | 16 | // I want to uglify with mangling only app files, not thirdparty libs |
| 15 | 17 | test: /\.js$/, |
| ... | ... | @@ -22,7 +24,7 @@ var testingFiles = glob.sync("./src/app/**/*.[sS]pec.ts"); |
| 22 | 24 | var webpackConfig = { |
| 23 | 25 | entry: { |
| 24 | 26 | noosfero: './src/app/index.ts', |
| 25 | - 'test': './src/test.ts' | |
| 27 | + 'noosfero-specs': './src/spec.ts' | |
| 26 | 28 | }, |
| 27 | 29 | |
| 28 | 30 | |
| ... | ... | @@ -38,7 +40,7 @@ var webpackConfig = { |
| 38 | 40 | extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'] |
| 39 | 41 | }, |
| 40 | 42 | // Source maps support (or 'inline-source-map' also works) |
| 41 | - devtool: 'source-map', | |
| 43 | + devtool: 'inline-source-map', | |
| 42 | 44 | |
| 43 | 45 | module: { |
| 44 | 46 | loaders: [{ | ... | ... |