45
votes

I have a rails project and am running tests for my JavaScript test (Jasmine) through Karma

.travis.yml file

language: ruby
rvm:
  - 2.0.0
script:
  - RAILS_ENV=test bundle exec rake --trace db:migrate test
  - karma start --single-run --browsers PhantomJS test/karma/config/unit.js

Travis fails saying it does not find karma. is there a way to define node_js as another language and install karma on the build VM?

3
FYI github.com/travis-ci/travis-ci/issues/4090 indicates they will not support it any time soon.Jeff Hammond

3 Answers

52
votes

It is not possible yet to have several languages on travis configuration file.

On the other hand, all environments run node.js. The following script does the trick:

language: ruby
rvm:
  - 2.0.0
before_script:
  - npm install karma
script:
  - RAILS_ENV=test bundle exec rake --trace db:migrate test
  - karma start --single-run --browsers PhantomJS test/karma/config/unit.js

Help found on an old thread in a google group

5
votes

K-Yo's answer got me moving in the right direction, but far short of success. Here is what I needed:

First in my .travis.yml:

language: ruby

rvm:
  - 2.1.1

before_script:
  - psql -c 'create database spokenvote_test;' -U postgres
  - cp config/database.travis.yml config/database.yml
  - rake db:test_prep
  - npm install karma
  - npm install karma-jasmine
  - npm install karma-coverage
  - npm install karma-phantomjs-launcher
  - npm install karma-coffee-preprocessor

script:
  - bundle exec rspec spec # basic for ruby
  - node_modules/karma/bin/karma start config/karma.conf.js --single-run --browsers PhantomJS

Then I also placed this code in my package.json, though I'm not sure if it was needed:

"devDependencies": {
    "karma": "~0.12",
    "karma-jasmine": "~0.2",
    "karma-coverage": "~0.2.6",
    "karma-phantomjs-launcher": "~0.1.4",
    "karma-coffee-preprocessor": "~0.2.1"
},

Finally, I learned that Travis is case sensitive, so:

'bower_components/jquery/dist/jquery.min.js',

in my karma.conf.js needed to be:

'bower_components/jQuery/dist/jquery.min.js',
2
votes

When the language key in .travis.yml is set to node, Travis will run nvm install 0.12 at the beginning of the build. Similarly, for a Ruby project, Travis will run rvm use 2.2.2 --install --binary --fuzzy at the beginning of the build.

I've had success running both commands in a Bash build