# Testing Multiple Versions of Node

**URL:** <https://discuss.circleci.com/t/testing-multiple-versions-of-node/542>\
**Category:** Programming Languages\
**Tags:** nodejs\
**Created:** [November 15, 2015, 10:12pm UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542 "2015-11-15T22:12:00Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![levlaz](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/levlaz/32/36978_2.png) [@levlaz](https://discuss.circleci.com/u/levlaz)\
**Post date:** [November 15, 2015, 10:12pm UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542/1 "2015-11-15T22:12:00Z")

</div>

We often get requests on how to test with multiple versions of Node.JS, it is actually quite simple.

For instance, if we wanted to run tests on 0.10, 0.12, and 4.0 you would add something like this to your circle.yml file.

```auto
test:
  override:
    - nvm use 0.10 && ./runtest
    - nvm use 0.12 && ./runtest 
    - nvm use 4.0 && ./runtest 

```

---

<div class="post-metadata">

**Author:** ![adidahiya](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/adidahiya/32/1830_2.png) [@adidahiya](https://discuss.circleci.com/u/adidahiya)\
**Post date:** [April 5, 2016, 4:01pm UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542/2 "2016-04-05T16:01:23Z")

</div>

How does this work with parallelism? How can I run a different version of node in each parallel container?

---

<div class="post-metadata">

**Author:** ![levlaz](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/levlaz/32/36978_2.png) [@levlaz](https://discuss.circleci.com/u/levlaz)\
**Post date:** [April 7, 2016, 1:43am UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542/3 "2016-04-07T01:43:06Z")

</div>

You should be able to specify in `circle.yml` which node should run which command as shown here[1].

[1] [https://circleci.com/docs/1.0/parallel-manual-setup/](https://circleci.com/docs/1.0/parallel-manual-setup/)

---

<div class="post-metadata">

**Author:** ![benjamine](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/benjamine/32/2747_2.png) [@benjamine](https://discuss.circleci.com/u/benjamine)\
**Post date:** [June 28, 2016, 2:19am UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542/4 "2016-06-28T02:19:57Z")

</div>

it’s not safe to assume your app is tested by only doing `nvm use` across versions, that’s not enough isolation.  
at least you should also use the right version of npm matching the node version, and for each, `rm -rf node_modules && npm install` again.  
and that’s assuming any custom hooks on your package.json aren’t doing anything that contaminates the following tests.  
I guess the only completely safe way would be to use separate containers.

---

<div class="post-metadata">

**Author:** ![tom](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/tom/32/27680_2.png) [@tom](https://discuss.circleci.com/u/tom)\
**Post date:** [June 28, 2016, 2:31pm UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542/5 "2016-06-28T14:31:14Z")

</div>

If you’re prepared to test in parallel as suggested by Lev above you can get better isolation by adding the following to `circle.yml`:

```auto
dependencies:
  pre:
    - case $CIRCLE_NODE_INDEX in 0) NODE_VERSION=4 ;; 1) NODE_VERSION=5 ;; 2) NODE_VERSION=6 ;; esac; nvm install $NODE_VERSION && nvm alias default $NODE_VERSION

test:
  override:
    - ./<your-test-command>

```

This example assumes that parallelism is set to 3x.

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/circleci/original/3X/5/1/511608acda8e85906e15909b57bd0a46c1dbe291.png) [@system](https://discuss.circleci.com/u/system)\
**Post date:** [June 18, 2018, 11:33am UTC](https://discuss.circleci.com/t/testing-multiple-versions-of-node/542/6 "2018-06-18T11:33:01Z")

</div>


