gulp-jasmine icon indicating copy to clipboard operation
gulp-jasmine copied to clipboard

Jasmine test browserified code

Open JacksonGariety opened this issue 10 years ago • 14 comments

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)
  )

JacksonGariety avatar Feb 04 '14 21:02 JacksonGariety

@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 avatar Feb 04 '14 21:02 deepak1556

@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 avatar Feb 04 '14 21:02 JacksonGariety

@JacksonGariety yes

sindresorhus avatar Feb 04 '14 21:02 sindresorhus

Perhaps eval with vm in minijasminenode?

shuhei avatar Feb 04 '14 22:02 shuhei

@shuhei ~~juliemr/minijasminenode doesn't use vm, so is it necessary?~~

Nvm, the gulp-jasmine variables would clash with the user's variables.

JacksonGariety avatar Feb 04 '14 22:02 JacksonGariety

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

JacksonGariety avatar Feb 04 '14 23:02 JacksonGariety

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 ?

deepak1556 avatar Feb 05 '14 10:02 deepak1556

It would be nice to make a pull request to minijasminenode instead of copying it into gulp-jasmine. I guess evaling Buffer can be acceptable to minijasminenode.

shuhei avatar Feb 05 '14 15:02 shuhei

@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.

JacksonGariety avatar Feb 05 '14 18:02 JacksonGariety

@shuhei but minijasminenode never gains access to the actual data from the stream, it gets pushed and array of files.

JacksonGariety avatar Feb 05 '14 18:02 JacksonGariety

@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?

JacksonGariety avatar Feb 05 '14 18:02 JacksonGariety

Going to switch to mocha now, this doesn't work but it may be close: https://github.com/jacksongariety/gulp-jasmine

JacksonGariety avatar Feb 05 '14 19:02 JacksonGariety

@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.

deepak1556 avatar Feb 05 '14 19:02 deepak1556

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.

sindresorhus avatar Feb 15 '14 01:02 sindresorhus