Skip to content

Commit 9310451

Browse files
committed
Merge pull request #33 from jhnns/refactor/tests
Refactor tests
2 parents 08df567 + e259d0e commit 9310451

19 files changed

+201
-46
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ module.exports = {
2828
loaders: [
2929
{
3030
test: /\.scss$/,
31-
loader: "style!css!sass?outputStyle=expanded&includePaths[]=" +
32-
(path.resolve(__dirname, './bower_components/bootstrap-sass-official'))
31+
// Query parameters are passed to node-sass
32+
loader: "style!css!sass?outputStyle=expanded&" +
33+
"includePaths[]=" +
34+
(path.resolve(__dirname, "./bower_components")) + "&" +
35+
"includePaths[]=" +
36+
(path.resolve(__dirname, "./node_modules"))
3337
}
3438
]
3539
}

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"description": "SASS loader for Webpack",
55
"main": "index.js",
66
"scripts": {
7-
"test": "rm test/output/* && node ./node_modules/webpack/bin/webpack.js -d -w --config=test/webpack.config.js"
7+
"pretest": "node test/prepare.js",
8+
"test": "mocha -R spec"
89
},
910
"keywords": [
1011
"sass",
@@ -19,11 +20,13 @@
1920
"license": "MIT",
2021
"dependencies": {
2122
"loader-utils": "~0.2.2",
22-
"node-sass": "^1.0.1",
23+
"node-sass": "^1.2.2",
2324
"sass-graph": "^0.1.2"
2425
},
2526
"devDependencies": {
26-
"css-loader": "^0.9.0",
27+
"mocha": "^2.0.1",
28+
"raw-loader": "^0.5.1",
29+
"should": "^4.3.0",
2730
"webpack": "^1.4.0"
2831
}
2932
}

test/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**/*.css

test/index.test.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
'use strict';
2+
3+
var should = require('should');
4+
var path = require('path');
5+
var webpack = require('webpack');
6+
var fs = require('fs');
7+
8+
var CR = /\r/g;
9+
10+
function readCss(ext, id) {
11+
return fs.readFileSync(path.join(__dirname, ext, id + '.css'), 'utf8').replace(CR, '');
12+
}
13+
14+
function test(name, id, query) {
15+
it(name, function (done) {
16+
var exts = ['scss', 'sass'];
17+
var pending = exts.length;
18+
19+
query = query || '';
20+
21+
exts.forEach(function (ext) {
22+
var expectedCss = readCss(ext, id);
23+
var sassFile = 'raw!' +
24+
path.resolve(__dirname, '../index.js') + '?' +
25+
query +
26+
(ext === 'sass'? '&indentedSyntax=sass' : '') + '!' +
27+
path.join(__dirname, ext, id + '.' + ext);
28+
var actualCss;
29+
30+
// run asynchronously
31+
webpack({
32+
entry: sassFile,
33+
output: {
34+
path: __dirname + '/output',
35+
filename: 'bundle.' + ext + '.js',
36+
libraryTarget: 'commonjs2'
37+
}
38+
}, function onCompilationFinished(err, stats) {
39+
if (err) {
40+
return done(err);
41+
}
42+
if (stats.hasErrors()) {
43+
return done(stats.compilation.errors[0]);
44+
}
45+
if (stats.hasWarnings()) {
46+
return done(stats.compilation.warnings[0]);
47+
}
48+
delete require.cache[path.resolve(__dirname, './output/bundle.' + ext + '.js')];
49+
50+
actualCss = require('./output/bundle.' + ext + '.js');
51+
// writing the actual css to output-dir for better debugging
52+
//fs.writeFileSync(__dirname + '/output/' + name + '.' + ext + '.async.css', actualCss, 'utf8');
53+
actualCss.should.eql(expectedCss);
54+
55+
pending--;
56+
if (pending === 0) {
57+
done();
58+
}
59+
});
60+
});
61+
});
62+
}
63+
64+
describe('sass-loader', function () {
65+
test('should compile simple sass without errors', 'language');
66+
test('should resolve imports correctly', 'imports');
67+
test('should pass the include paths to node-sass', 'include-paths',
68+
'includePaths[]=' + path.resolve(__dirname, './sass/another') + '&' +
69+
'includePaths[]=' + path.resolve(__dirname, './scss/another'));
70+
});

test/output/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.js

test/prepare.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
'use strict';
2+
3+
var sass = require('node-sass');
4+
var fs = require('fs');
5+
var path = require('path');
6+
7+
['scss', 'sass'].forEach(function (ext) {
8+
var files = [];
9+
10+
fs.readdirSync(path.join(__dirname, ext))
11+
.filter(function (file) {
12+
return path.extname(file) === '.' + ext;
13+
})
14+
.map(function (file) {
15+
var filename;
16+
17+
files.push(filename = path.join(__dirname, ext, file));
18+
return sass.renderSync({
19+
outputStyle: 'compressed',
20+
file: filename,
21+
includePaths: [
22+
path.join(__dirname, ext, 'another')
23+
]
24+
})
25+
})
26+
.forEach(function (content, index) {
27+
fs.writeFileSync(files[index].replace(new RegExp('\\.' + ext + '$', 'gi'), '.css'), content, 'utf8');
28+
});
29+
});

test/sass/another/_module.sass

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.another-module
2+
background: hotpink

test/sass/imports.sass

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@import another/module

test/sass/include-paths.sass

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@import module

test/sass/language.sass

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
$font-stack: Helvetica, sans-serif
2+
$primary-color: #333
3+
4+
body
5+
font: 100% $font-stack
6+
color: $primary-color
7+
8+
nav
9+
ul
10+
margin: 0
11+
padding: 0
12+
list-style: none
13+
14+
li
15+
display: inline-block
16+
17+
a
18+
display: block
19+
padding: 6px 12px
20+
text-decoration: none
21+
22+
=border-radius($radius)
23+
-webkit-border-radius: $radius
24+
-moz-border-radius: $radius
25+
-ms-border-radius: $radius
26+
border-radius: $radius
27+
28+
.box
29+
+border-radius(10px)
30+
31+
.message
32+
border: 1px solid #ccc
33+
padding: 10px
34+
color: #333
35+
36+
.success
37+
@extend .message
38+
border-color: green
39+
40+
.error
41+
@extend .message
42+
border-color: red
43+
44+
.warning
45+
@extend .message
46+
border-color: yellow
47+

0 commit comments

Comments
 (0)