瀏覽代碼

Added browser tests.

Covers the project with browser tests, not only V8 via node/iojs. Tests are runned with [zuul](https://github.com/defunctzombie/zuul) which
provides simple local browser testing, aswell as cloud testing on multiple browsers with [saucelabs](http://saucelabs.com).
tags/v2.1.0
Phillip Johnsen 11 年之前
父節點
當前提交
b473d19cae
共有 9 個文件被更改,包括 147 次插入56 次删除
  1. +2
    -0
      .gitignore
  2. +7
    -0
      .travis.yml
  3. +16
    -0
      .zuul.yml
  4. +8
    -0
      README.md
  5. +7
    -3
      package.json
  6. +14
    -0
      test/create-browser-suite.js
  7. +55
    -0
      test/render-helper.js
  8. +30
    -0
      test/render-test-browser-tmpl.mustache
  9. +8
    -53
      test/render-test.js

+ 2
- 0
.gitignore 查看文件

@@ -6,3 +6,5 @@ yui3
qooxdoo.mustache.js

npm-debug.log

test/render-test-browser.js

+ 7
- 0
.travis.yml 查看文件

@@ -6,6 +6,13 @@ node_js:
- 0.12
before_install:
- "test $TRAVIS_NODE_VERSION = '0.6' && npm install -g npm@1.3.26 || npm install -g npm"
script:
- npm test
- npm run test-browser
matrix:
allow_failures:
- node_js: 0.11
env:
global:
- secure: TKDF1BgAR3S1bqFvikN6O3nbcLk20PDkL6QUVS6IkqQNtL1wXK4+2+GKcvJzOjCZg4OnXAFFtF/rfh9bcNlrGtWCG9CFkuGjUM7iONSQJr0kvCn7jris2jGGBupoPkX7MKlxaqrg6bmbp1QgA42/Hu4AlsNPCBiuFjpvL67VSqg=
- secure: sOyIxcOBaiFFUoL0+NcHPRVZm2LnG8u6qOzkrr4gSHil/qd8t91KOdJYVkZHWanI3R+T9sv8yDeZGTBz3QS993Wp0S0D3BjB2LKu8e7QFlMIms8dBQD6IR868qF6H22Qyaz5SNVwPuWVsEs8p92dc2C2xw9AvGSP3kpNe8aMjCA=

+ 16
- 0
.zuul.yml 查看文件

@@ -0,0 +1,16 @@
ui: mocha-bdd
browsers:
- name: chrome
version: latest
- name: firefox
version: latest
- name: safari
version: 6..latest
- name: opera
version: 11..latest
- name: ie
version: 8..latest
- name: iphone
version: 6.0..latest
- name: android
version: 4.0..latest

+ 8
- 0
README.md 查看文件

@@ -522,6 +522,14 @@ Then, you can run the test with:

$ TEST=mytest npm run test-render

### Browser tests

Browser tests are not included in `npm test` as they run for too long, although they are runned automatically on Travis upon commit. Run browser tests locally in any browser:

$ npm run test-browser-local

then point your browser to `http://localhost:8080/__zuul`

### Troubleshooting

#### npm install fails


+ 7
- 3
package.json 查看文件

@@ -32,12 +32,16 @@
},
"scripts": {
"pretest": "eslint mustache.js",
"test": "mocha --reporter spec",
"test-render": "mocha --reporter spec test/render-test"
"test": "mocha --reporter spec test/*-test.js",
"test-render": "mocha --reporter spec test/render-test",
"pre-test-browser": "node test/create-browser-suite.js",
"test-browser": "npm run pre-test-browser && zuul -- test/context-test.js test/parse-test.js test/scanner-test.js test/render-test-browser.js",
"test-browser-local": "npm run pre-test-browser && zuul --local 8080 -- test/context-test.js test/scanner-test.js test/parse-test.js test/render-test-browser.js"
},
"devDependencies": {
"eslint": "^0.20.0",
"mocha": "~2.1.0"
"mocha": "~2.1.0",
"zuul": "^2.1.1"
},
"spm": {
"main": "mustache.js",


+ 14
- 0
test/create-browser-suite.js 查看文件

@@ -0,0 +1,14 @@
require('./helper');

var renderHelper = require('./render-helper');

var fs = require('fs');
var path = require('path');

var _testsTemplate = path.join(__dirname, 'render-test-browser-tmpl.mustache');
var _templateContent = fs.readFileSync(_testsTemplate).toString();

var tests = renderHelper.getTests();
var content = Mustache.render(_templateContent, JSON.stringify(tests));

fs.writeFileSync(path.join(__dirname, 'render-test-browser.js'), content);

+ 55
- 0
test/render-helper.js 查看文件

@@ -0,0 +1,55 @@
var fs = require('fs');
var path = require('path');

var _files = path.join(__dirname, '_files');

function getContents(testName, ext) {
try {
return fs.readFileSync(path.join(_files, testName + '.' + ext), 'utf8');
} catch (ex) {
return null;
}
}

function getView(testName) {
var view = getContents(testName, 'js');
if (!view) throw new Error('Cannot find view for test "' + testName + '"');
return view;
}

function getPartial(testName) {
try {
return getContents(testName, 'partial');
} catch (error) {
// No big deal. Not all tests need to test partial support.
}
}

// You can put the name of a specific test to run in the TEST environment
// variable (e.g. TEST=backslashes vows test/render-test.js)
var testToRun = process.env.TEST;

var testNames;
if (testToRun) {
testNames = [testToRun];
} else {
testNames = fs.readdirSync(_files).filter(function (file) {
return (/\.js$/).test(file);
}).map(function (file) {
return path.basename(file).replace(/\.js$/, '');
});
}

function getTest(testName) {
return {
name: testName,
view: getView(testName),
template: getContents(testName, 'mustache'),
partial: getPartial(testName),
expect: getContents(testName, 'txt')
};
}

exports.getTests = function getTests() {
return testNames.map(getTest);
};

+ 30
- 0
test/render-test-browser-tmpl.mustache 查看文件

@@ -0,0 +1,30 @@
require('./helper');

describe('Mustache.render', function () {
beforeEach(function () {
Mustache.clearCache();
});

var i;
var tests = {{{.}}};

for (i = 0; i < tests.length; i++) {

(function indexClosure(test) {
var view = eval(test.view);

it('knows how to render ' + test.name, function () {

var output;
if (test.partial) {
output = Mustache.render(test.template, view, { partial: test.partial });
} else {
output = Mustache.render(test.template, view);
}

assert.equal(output, test.expect);
});
})(tests[i]);

}
});

+ 8
- 53
test/render-test.js 查看文件

@@ -1,72 +1,27 @@
require('./helper');

var fs = require('fs');
var path = require('path');
var _files = path.join(__dirname, '_files');
var renderHelper = require('./render-helper');

function getContents(testName, ext) {
try {
return fs.readFileSync(path.join(_files, testName + '.' + ext), 'utf8');
} catch (ex) {
return null;
}
}

function getView(testName) {
var view = getContents(testName, 'js');
if (!view) throw new Error('Cannot find view for test "' + testName + '"');
return eval(view);
}

function getPartial(testName) {
try {
return getContents(testName, 'partial');
} catch (error) {
// No big deal. Not all tests need to test partial support.
}
}

function getTest(testName) {
var test = {};
test.view = getView(testName);
test.template = getContents(testName, 'mustache');
test.partial = getPartial(testName);
test.expect = getContents(testName, 'txt');
return test;
}

// You can put the name of a specific test to run in the TEST environment
// variable (e.g. TEST=backslashes vows test/render-test.js)
var testToRun = process.env.TEST;

var testNames;
if (testToRun) {
testNames = [testToRun];
} else {
testNames = fs.readdirSync(_files).filter(function (file) {
return (/\.js$/).test(file);
}).map(function (file) {
return path.basename(file).replace(/\.js$/, '');
});
}
var tests = renderHelper.getTests();

describe('Mustache.render', function () {
beforeEach(function () {
Mustache.clearCache();
});

testNames.forEach(function (testName) {
var test = getTest(testName);
tests.forEach(function (test) {
var view = eval(test.view);

it('knows how to render ' + testName, function () {
it('knows how to render ' + test.name, function () {
var output;
if (test.partial) {
output = Mustache.render(test.template, test.view, { partial: test.partial });
output = Mustache.render(test.template, view, { partial: test.partial });
} else {
output = Mustache.render(test.template, test.view);
output = Mustache.render(test.template, view);
}

assert.equal(output, test.expect);
});

});
});

Loading…
取消
儲存