Welcome to the Linux Foundation Forum!

Lab 6.2: Unable to pass the test - fastify should be greater than or equal to 2.0.0, while accepting

shahahmed
shahahmed Posts: 1
edited May 2021 in LFW211 Class Forum

I have tried several different ways to install fastify on the project. And I know for the fact that the installation was correct but there something seems to be off with the test if I am not wrong.

I tried installations the following way,

npm install --save --save-exact fastify@2.x.x

Resulting in the following entry in package.json,

"fastify": "2.15.3"

But the test fails here.

Then I tried the following, hoping that should resolve the test,

npm install --save --save-exact fastify@2.0.0

But the test fails here too. Not sure what is going on here but atleast one of the two above mentioned should pass the test.

Test from the downloaded assignments/labs,

'use strict'

const assert = require('assert')
const semver = require('semver')
const pkg = require('./package.json')
assert.doesNotThrow(() => {
  require('fastify')
}, 'fastify should be installed')
assert.doesNotThrow(() => {
  require('rfdc')
}, 'rfdc should be installed')
const { dependencies = {} } = pkg
const deplist = Object.entries(dependencies)
const fastify = deplist.find(([name]) => name === 'fastify').pop()
const rfdc = deplist.find(([name]) => name === 'rfdc').pop()
assert(rfdc === '1.1.3', 'rfdc should be at exactly 1.1.3')
const { range } = new semver.Range(fastify)
console.log(range)
assert(range === '>=2.0.0 <3.0.0-0', 'fastify should be greater than or equal to 2.0.0, while accepting all future MINOR and PATCH versions')
console.log('passed')

Can anyone please point out what is going wrong here?

Thanks.

Comments

  • I have the same issue, I believe I'm doing it correctly. What's your package.json, mine is:
    {
    "name": "labs-2",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
    "test": "node test"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "dependencies": {
    "fastify": "^2.15.3",
    "rfdc": "1.1.3",
    "semver": "^7.3.4"
    }
    }

  • kellv
    kellv Posts: 19

    @shahahmed, your comment makes sense to me, and I even validated over at: https://semver.npmjs.com/ using their fastify example. I think this example is looking for their way. I would love to know if the graders take into account this example...

  • I need to check this again, last time it was a breaking change in a minor version of semver (which is ironic), it may be that this has happened again in the opposite direction. @kellv I'm also going to check the grading on this one as well

  • theodoros
    theodoros Posts: 17
    edited January 2022

    I have noticed that too,

    whenever you install a package in a range, it installs the latest in that range.

    for example:

    • npm i fastify@2.x.x -> package record is : fastify: 2.15.3
    • npm i fastify@^2.0.0 -> package record is fastify: ^2.15.3
    • npm fastify@">=2.0.0" => package record is "fastify": "^3.26.0"
    • npm fastify@">=2.0.0 && < 3.0.0" => package record is "fastify": "^2.15.3"

    So the only workaround on that, that i have found, is to manually add it, into the package.json.

    But Important, although we add manually into package.json : fastify@">=2.0.0", again the installed version is the latest e.g "3.26.0".

    This is ok for passing the lab exersice, but if we come accross that in the exam, it will not pass, unless we do it manually.

  • k0dard
    k0dard Posts: 115

    You do not have to do it manually... In order to pass the test you need to install the package like this:

    npm install fastify@2.0.0

    This will add "fastify": "^2.0.0" to your package.json.

    It is not very clear in the documentation, but if you type npm help install and look for --save-exact you'll find:

    Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator.

    I suppose that the default semvar operator is carret (^) and so without --save-exact flag, carret will be added automatically. Which is logical - by default package.json will allow all minor and patch version updates, which will not break your app...

    If you type:

    npm install fastify@^2.0.0

    you're basically telling npm to install latest MAJOR version 2, so it adds ^2.5.13 or whatever is the latest MAJOR version 2.

    See https://docs.npmjs.com/cli/v6/using-npm/semver#caret-ranges-123-025-004:

    Allows changes that do not modify the left-most non-zero digit

    That's how I understood it, and it works. If someone could confirm it though it would be great... :smile:

  • @k0dard is 100% correct

Categories

Upcoming Training