pkg-js-autopkgtest(7)

pkg-js-autopkgtest7

Autopkgtest runner to automatically test node.js packages

Usage

•

in debian/control, insert "Testsuite: autopkgtest-pkg-nodejs"

•

write upstream test in debian/tests/pkg-js/test (will be launched by
sh -e)

•

if some other files than "test*" and "debian/tests/test_modules/*"
and installed files are needed, write a "debian/tests/pkg-js/files" with
all needed directories/files

That's all, other debian/tests files will be written on-the-fly by
autodep8 during autopkgtest

If you want to launch the same test during build, simply add
dh-sequence-nodejs in build dependencies

How it works

•

if directory debian/tests/test_modules exists, NODE_PATH will be set
to NODE_PATH=debian/tests/test_modules:node_modules

•

if additional modules were linked during build, they will be linked into
node_module (debian/nodejs/extlinks)

•

if additional modules were copies during build, they will be copied into
node_module (debian/nodejs/extcopies)

•

if package contains some other components, they will be linked into
node_module

•

autopkgtest will launch 2 tests:

•

a "require" test (see below)

•

the test defined in debian/tests/pkg-js/test in a temporary dir (it
links installed files)

•

if dh-sequence-nodejs is a build dependency, dh_auto_test will
launch the same test (debian/tests/pkg-js/test) if exists, else just a
node -e "require('.')". Note that you can override test during build
using debian/nodejs/test

•

if file debian/tests/pkg-js/require-name exists, its content will be used
as module name in "require" test (instead of using package.json value)

Full example

•

debian/control

...
Testsuite: autopkgtest-pkg-nodejs
Build-Depends: dh-sequence-nodejs
...
•

debian/tests/pkg-js/test

mocha -R spec

Additional test packages or test restrictions

autodep8 allows one to add additional packages during autopkgtest (and/or
additional restrictions) by using a debian/tests/autopkgtest-pkg-nodejs.conf
file:

extra_depends=mocha, npm
extra-restrictions=needs-internet

ENABLE proto

Since version 0.15.0, pkg-js-autopkgtest launches Node.js with
--disable-proto=throw. This causes tests to fail if
Object.prototype.__proto__ property is used.

If a package can use this feature without security hole (for test for example),
it is possible to disable this nodejs option by creating an empty
debian/tests/pkg-js/enable_proto file, until Debian's Node.js enables this
feature by default.

The require test

How it works

First, pkg-js-autopkgtest searches the module name.

•

if debian/tests/pkg-js/require-name exists, its content will be used as
module name

•

else if looks at package.json "name" field:

•

if debian/nodejs/main exists, like dh-sequence-nodejs, it uses the
package.json from this directory

•

else it uses ./package.json

Then pkg-js-autopkgtest looks at package.json fields, not using the file
mentioned above, but using the file installed by the Debian package to test
(ie /usr/share/nodejs/<module-name>/package.json):

•

if type equals module, then:

•

it builds a node_modules directory with all available dependencies of
the module

•

it builds a test.mjs file that tries to import the module to test and
launch it

•

if main isn't defined and index.js doesn't exist, it skip the test
(this avoids to try to test @types/<foo> modules)

•

else it simply launches a nodejs -e &quot;require(&#39;$moduleName&#39;)&quot;

Since version 0.10.0, pkg-js-autopkgtest does the same test for all other
modules installed in nodejs root directories (components installed by
dh-sequence-nodejs using debian/nodejs/root_modules file). If one fail, the
whole test is marked as failed.

Returned values:

•

0 if all tests succeed (even if some secondary modules are skipped)

•

77 if all tests succeed but the main module test was skipped. This value
is used by autopkgtest to report a SKIP instead of a failure.

•

else, the number of failure. Then autopkgtest considers the test as FAIL

Customize require test

If you want to skip some secondary module tests, simply list them in
debian/tests/pkg-js/require-SKIP (one module per line).

If you want to skip the whole "require" test, use this:

echo require > debian/tests/pkg-js/SKIP

The main test

pkg-js-autopkgtest uses the same test than dh-sequence-nodejs: it
launches sh -ex debian/tests/pkg-js/test but using the files installed by
the Debian package.

How main test works

pkg-js-autopkgtest search for module name using the same way than "require"
test. Then it prepares the test environment:

•

it creates a temporary directory

•

it links all files installed in the directory corresponding to module name
/usr/share/nodejs/<module-name>

•

it creates a node_modules directory and links into it:

•

all modules listed in debian/nodejs/extlinks

•

all modules present in debian/build_modules and debian/tests/test_modules

•

all other modules installed by the Debian package in nodejs root directories
debian/nodejs/root_modules

•

it copies in node_modules directory all modules listed in
debian/nodejs/extcopies

•

if looks at debian/tests/pkg-js/files

•

if it exists, it copies all files/directories listed in it from source
directory to temporary one

•

else it copies from source directory to temporary one:

•

all test* files

•

all Makefile like files (rollup.config.js, gulpfile.js,... )

Then it changes its directory to the temporary one launches the test using
sh -ex debian/tests/pkg-js/test.

Releases

2 releases since Debian 12 (Bookworm); the text changed 1 time.

  1. 12
  2. 13

From pkg-js-autopkgtest 0.15.23 in Debian 13 (Trixie). Parsed by carta from the page's man source.