gulp-jasmine
gulp-jasmine copied to clipboard
Jasmine test browserified code
I'm trying to get gulp to build/transform my code with browserify/envify, and then test the transformed code with jasmine.
The browserify works:
gulp.src('./test/*')
.pipe(browserify({ transform: ['reactify', 'envify'] }))
.pipe(
es.map(function (file, callback) {
console.log(file.contents.toString()) //=> transformed code! :D
})
)
However when I pipe it into jasmine, I get failing tests which show code that is not reactified/envified:
gulp.src('./test/*')
.pipe(browserify({ transform: ['reactify', 'envify'] }))
.pipe(
jasmine({ verbose: true }) //=> unexpected <ReactComponent/> (untransformed code)
)
@sindresorhus is it because miniJasmineLib
reading from file.path instead of the contents https://github.com/sindresorhus/gulp-jasmine/blob/master/index.js#L29 ?
@deepak1556 yeah I was just about to post.
@sindresorhus would you merge if I made a fork of gulp-jasmine which takes file content instead of the path? If it just takes the path, that partially defeats the purpose of using Gulp over Grunt, since I'd need to write the browserified code to a temp file and then read it again.
@JacksonGariety yes
Perhaps eval with vm
in minijasminenode?
@shuhei ~~juliemr/minijasminenode doesn't use vm
, so is it necessary?~~
Nvm, the gulp-jasmine variables would clash with the user's variables.
Stuck on an error where jasmine continually throws Error: jasmine.Suite() required
no matter what I do.
If someone wants to take a look: https://github.com/jacksongariety/gulp-jasmine
you tried to expose it
to global context which override mocha's it
and was treating it as jasmine spec so was expecting a suite describe
to cover it. if you try commenting your global.it
that error will clear.
EDIT: Why not create a new context and rewire the methods as you are doing now and run vm
in this context as global vm.runInNewContext
?
It would be nice to make a pull request to minijasminenode instead of copying it into gulp-jasmine. I guess eval
ing Buffer
can be acceptable to minijasminenode.
@deepak1556 that's what I've discovered, working on that now.
@shuhei I was thinking add minijasminenode back, and simply do not use the index file, only jasmine-1.3.1 and the other two addons.
@shuhei but minijasminenode never gains access to the actual data from the stream, it gets pushed and array of files.
@deepak1556 but you can't require
from within a vm, so this whole process is a run-around. I can't figure what should run in which context, and it all seems really, really hacky. Any ideas?
Going to switch to mocha now, this doesn't work but it may be close: https://github.com/jacksongariety/gulp-jasmine
@JacksonGariety you can try to shim require with giving the relative path to modules like this inside a vm https://github.com/google/tracing-framework/blob/8bdbffb19453a102917201866c36ed750c668495/bin/trace-runner.js#L67 but yeah there is another problem prototype properties of the sandbox wont be available inside the newContext
,so a failure method i suggested.
I think using vm.runInNewContext
might be a viable idea. I've been considering doing that for gulp-mocha.
Since Jasmine 2.0 is out now. It might just make more sense to use it directly.