mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-11-08 23:25:51 +01:00
refactor: functional testing
* server now are executed in the jest setup phase * disable one snapshot
This commit is contained in:
parent
b113aa3a55
commit
9242d498d7
4
.babelrc
4
.babelrc
@ -37,8 +37,8 @@
|
||||
"transform-object-rest-spread"
|
||||
]
|
||||
},
|
||||
"testE2E": {
|
||||
/** for an issue on puppeteer env we need to use es2015-node4 **/
|
||||
"testOldEnv": {
|
||||
/** FIXME: for an issue on jest env we need to use es2015-node4 **/
|
||||
"presets": [ "es2015-node4", "flow"],
|
||||
"plugins": [
|
||||
"transform-class-properties",
|
||||
|
32
flow-typed/npm/jest-environment-node_vx.x.x.js
vendored
Normal file
32
flow-typed/npm/jest-environment-node_vx.x.x.js
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
// flow-typed signature: 76121323ae40fcb28bee1398717ee06c
|
||||
// flow-typed version: <<STUB>>/jest-environment-node_v22.x.x/flow_v0.69.0
|
||||
|
||||
/**
|
||||
* This is an autogenerated libdef stub for:
|
||||
*
|
||||
* 'jest-environment-node'
|
||||
*
|
||||
* Fill this stub out by replacing all the `any` types.
|
||||
*
|
||||
* Once filled out, we encourage you to share your work with the
|
||||
* community by sending a pull request to:
|
||||
* https://github.com/flowtype/flow-typed
|
||||
*/
|
||||
|
||||
declare module 'jest-environment-node' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* We include stubs for each file inside this npm package in case you need to
|
||||
* require those files directly. Feel free to delete any files that aren't
|
||||
* needed.
|
||||
*/
|
||||
declare module 'jest-environment-node/build/index' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
// Filename aliases
|
||||
declare module 'jest-environment-node/build/index.js' {
|
||||
declare module.exports: $Exports<'jest-environment-node/build/index'>;
|
||||
}
|
@ -156,8 +156,8 @@
|
||||
"pretest": "npm run code:build",
|
||||
"test": "cross-env npm run test:unit && npm run test:func",
|
||||
"test:unit": "cross-env NODE_ENV=test BABEL_ENV=test TZ=UTC jest --config ./jest.config.unit.js",
|
||||
"test:func": "cross-env NODE_ENV=test BABEL_ENV=test jest --config ./test/jest.config.func.js --testPathPattern ./test/functional/index*",
|
||||
"test:e2e": "cross-env BABEL_ENV=testE2E jest --config ./test/jest.config.e2e.js",
|
||||
"test:func": "cross-env NODE_ENV=testOldEnv jest --config ./test/jest.config.func.js --testPathPattern ./test/functional/index*",
|
||||
"test:e2e": "cross-env BABEL_ENV=testOldEnv jest --config ./test/jest.config.e2e.js",
|
||||
"test:all": "npm run test && npm run test:e2e",
|
||||
"pre:ci": "npm run lint && npm run build:webui",
|
||||
"commitmsg": "commitlint -e $GIT_PARAMS",
|
||||
|
@ -1,16 +1,10 @@
|
||||
// @flow
|
||||
import _ from 'lodash';
|
||||
import path from 'path';
|
||||
|
||||
// we need this for notifications
|
||||
import {setup} from '../../src/lib/logger';
|
||||
setup();
|
||||
|
||||
import {VerdaccioConfig} from '../lib/verdaccio-server';
|
||||
import VerdaccioProcess from '../lib/server_process';
|
||||
import ExpressServer from './lib/simple_server';
|
||||
import Server from '../lib/server';
|
||||
import type {IServerProcess, IServerBridge} from '../types';
|
||||
import type {IServerBridge} from '../types';
|
||||
|
||||
import basic from './basic/basic';
|
||||
import packageAccess from './package/access';
|
||||
@ -36,81 +30,36 @@ import upLinkAuth from './uplink.auth';
|
||||
|
||||
describe('functional test verdaccio', function() {
|
||||
jest.setTimeout(10000);
|
||||
const EXPRESS_PORT = 55550;
|
||||
const pathStore = path.join(__dirname, './store');
|
||||
const SILENCE_LOG = !process.env.VERDACCIO_DEBUG;
|
||||
const processRunning = [];
|
||||
const config1 = new VerdaccioConfig(
|
||||
path.join(pathStore, '/test-storage'),
|
||||
path.join(pathStore, '/config-1.yaml'),
|
||||
'http://localhost:55551/', 55551);
|
||||
const config2 = new VerdaccioConfig(
|
||||
path.join(pathStore, '/test-storage2'),
|
||||
path.join(pathStore, '/config-2.yaml'),
|
||||
'http://localhost:55552/', 55552);
|
||||
const config3 = new VerdaccioConfig(
|
||||
path.join(pathStore, '/test-storage3'),
|
||||
path.join(pathStore, '/config-3.yaml'),
|
||||
'http://localhost:55553/', 55553);
|
||||
const server1: IServerBridge = new Server(config1.domainPath);
|
||||
const server2: IServerBridge = new Server(config2.domainPath);
|
||||
const server3: IServerBridge = new Server(config3.domainPath);
|
||||
const process1: IServerProcess = new VerdaccioProcess(config1, server1, SILENCE_LOG);
|
||||
const process2: IServerProcess = new VerdaccioProcess(config2, server2, SILENCE_LOG);
|
||||
const process3: IServerProcess = new VerdaccioProcess(config3, server3, SILENCE_LOG);
|
||||
const express: any = new ExpressServer();
|
||||
|
||||
beforeAll((done) => {
|
||||
Promise.all([
|
||||
process1.init(),
|
||||
process2.init(),
|
||||
process3.init()]).then((forks) => {
|
||||
_.map(forks, (fork) => {
|
||||
processRunning.push(fork[0]);
|
||||
});
|
||||
express.start(EXPRESS_PORT).then((app) =>{
|
||||
done();
|
||||
}, (err) => {
|
||||
console.error(err);
|
||||
done();
|
||||
});
|
||||
}).catch((err) => {
|
||||
console.error(err);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
_.map(processRunning, (fork) => {
|
||||
fork.stop();
|
||||
});
|
||||
express.server.close();
|
||||
});
|
||||
const server1: IServerBridge = global.__SERVERS__[0];
|
||||
const server2: IServerBridge = global.__SERVERS__[1];
|
||||
const server3: IServerBridge = global.__SERVERS__[2];
|
||||
const app = global.__WEB_SERVER__.app;
|
||||
|
||||
// list of test
|
||||
// note: order of the following calls is important
|
||||
packageAccess(server1);
|
||||
basic(server1, server2);
|
||||
gh29(server1, server2);
|
||||
tags(server1, express.app);
|
||||
packageGzip(server1, express.app);
|
||||
incomplete(server1, express.app);
|
||||
tags(server1, app);
|
||||
packageGzip(server1, app);
|
||||
incomplete(server1, app);
|
||||
mirror(server1, server2);
|
||||
preserveTags(server1, server2, express.app);
|
||||
preserveTags(server1, server2, app);
|
||||
readme(server1, server2);
|
||||
nullstorage(server1, server2);
|
||||
race(server1);
|
||||
racycrash(server1, express.app);
|
||||
racycrash(server1, app);
|
||||
packageScoped(server1, server2);
|
||||
security(server1);
|
||||
addtag(server1);
|
||||
pluginsAuth(server2);
|
||||
notify(express.app);
|
||||
notify(app);
|
||||
// requires packages published to server1/server2
|
||||
upLinkCache(server1, server2, server3);
|
||||
upLinkAuth();
|
||||
adduser(server1);
|
||||
logout(server1);
|
||||
basic(server1, server2);
|
||||
|
||||
});
|
||||
|
||||
process.on('unhandledRejection', function(err) {
|
||||
|
94
test/functional/lib/environment.js
Normal file
94
test/functional/lib/environment.js
Normal file
@ -0,0 +1,94 @@
|
||||
// @flow
|
||||
|
||||
import chalk from 'chalk';
|
||||
import path from 'path';
|
||||
import NodeEnvironment from 'jest-environment-node';
|
||||
import {VerdaccioConfig} from "../../lib/verdaccio-server";
|
||||
import VerdaccioProcess from "../../lib/server_process";
|
||||
import Server from "../../lib/server";
|
||||
import ExpressServer from "./simple_server";
|
||||
import type {IServerBridge} from '../../types';
|
||||
|
||||
const EXPRESS_PORT = 55550;
|
||||
|
||||
class FunctionalEnvironment extends NodeEnvironment {
|
||||
config: any;
|
||||
|
||||
constructor(config: any) {
|
||||
super(config)
|
||||
}
|
||||
|
||||
async startWeb() {
|
||||
const express: any = new ExpressServer();
|
||||
|
||||
return await express.start(EXPRESS_PORT);
|
||||
}
|
||||
|
||||
|
||||
async setup() {
|
||||
const SILENCE_LOG = !process.env.VERDACCIO_DEBUG;
|
||||
// $FlowFixMe
|
||||
const DEBUG_INJECT: boolean = process.env.VERDACCIO_DEBUG ? process.env.VERDACCIO_DEBUG : false;
|
||||
const forkList = [];
|
||||
const serverList = [];
|
||||
const pathStore = path.join(__dirname, '../store');
|
||||
const listServers = [
|
||||
{
|
||||
port: 55551,
|
||||
config: '/config-1.yaml',
|
||||
storage: '/test-storage'
|
||||
},
|
||||
{
|
||||
port: 55552,
|
||||
config: '/config-2.yaml',
|
||||
storage: '/test-storage2'
|
||||
},
|
||||
{
|
||||
port: 55553,
|
||||
config: '/config-3.yaml',
|
||||
storage: '/test-storage3'
|
||||
}
|
||||
];
|
||||
console.log(chalk.green('Setup Verdaccio Servers'));
|
||||
|
||||
const app = await this.startWeb();
|
||||
this.global.__WEB_SERVER__ = app;
|
||||
|
||||
for (let config of listServers) {
|
||||
const verdaccioConfig = new VerdaccioConfig(
|
||||
path.join(pathStore, config.storage),
|
||||
path.join(pathStore, config.config),
|
||||
`http://localhost:${config.port}/`, config.port);
|
||||
console.log(chalk.magentaBright(`Running registry ${config.config} on port ${config.port}`));
|
||||
const server: IServerBridge = new Server(verdaccioConfig.domainPath);
|
||||
serverList.push(server);
|
||||
const process = new VerdaccioProcess(verdaccioConfig, server, SILENCE_LOG, DEBUG_INJECT);
|
||||
|
||||
const fork = await process.init();
|
||||
console.log(chalk.blue(`Fork PID ${fork[1]}`));
|
||||
forkList.push(fork);
|
||||
}
|
||||
|
||||
this.global.__SERVERS_PROCESS__ = forkList;
|
||||
this.global.__SERVERS__ = serverList;
|
||||
}
|
||||
|
||||
async teardown() {
|
||||
await super.teardown();
|
||||
console.log(chalk.yellow('Teardown Test Environment.'));
|
||||
// this.global.__VERDACCIO_E2E__.stop();
|
||||
// this.global.__VERDACCIO__PROTECTED_E2E__.stop();
|
||||
// close verdaccios
|
||||
for (let server of this.global.__SERVERS_PROCESS__) {
|
||||
server[0].stop();
|
||||
}
|
||||
// close web server
|
||||
this.global.__WEB_SERVER__.server.close();
|
||||
}
|
||||
|
||||
runScript(script: string) {
|
||||
return super.runScript(script);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = FunctionalEnvironment;
|
5
test/functional/lib/setup.js
Normal file
5
test/functional/lib/setup.js
Normal file
@ -0,0 +1,5 @@
|
||||
// @flow
|
||||
|
||||
module.exports = async function() {
|
||||
// here we should create dinamically config files
|
||||
};
|
@ -18,8 +18,8 @@ export default class ExpressServer {
|
||||
extended: true
|
||||
}));
|
||||
|
||||
this.server = this.app.listen(port, function starExpressServer() {
|
||||
resolve();
|
||||
this.server = this.app.listen(port, () => {
|
||||
resolve(this);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
3
test/functional/pre-setup.js
Normal file
3
test/functional/pre-setup.js
Normal file
@ -0,0 +1,3 @@
|
||||
require("babel-polyfill");
|
||||
require('babel-register');
|
||||
module.exports = require('./lib/setup');
|
5
test/functional/teardown.js
Normal file
5
test/functional/teardown.js
Normal file
@ -0,0 +1,5 @@
|
||||
// const chalk = require('chalk');
|
||||
module.exports = async function() {
|
||||
// console.log(chalk.green('Teardown Verdaccio Functional'));
|
||||
// console.log(chalk.blue('Teardown:: all server were closed'));
|
||||
};
|
3
test/functional/test-environment.js
Normal file
3
test/functional/test-environment.js
Normal file
@ -0,0 +1,3 @@
|
||||
require("babel-polyfill");
|
||||
require('babel-register');
|
||||
module.exports = require('./lib/environment');
|
@ -3,5 +3,8 @@
|
||||
module.exports = {
|
||||
name: 'verdaccio-func-jest',
|
||||
verbose: true,
|
||||
globalSetup: './functional/pre-setup.js',
|
||||
globalTeardown: './functional/teardown.js',
|
||||
testEnvironment: './functional/test-environment.js',
|
||||
collectCoverage: false
|
||||
};
|
||||
|
@ -10,12 +10,14 @@ export default class VerdaccioProcess implements IServerProcess {
|
||||
bridge: IServerBridge;
|
||||
config: IVerdaccioConfig;
|
||||
childFork: any;
|
||||
isDebug: boolean;
|
||||
silence: boolean;
|
||||
|
||||
constructor(config: IVerdaccioConfig, bridge: IServerBridge, silence: boolean = true) {
|
||||
constructor(config: IVerdaccioConfig, bridge: IServerBridge, silence: boolean = true, isDebug: boolean = false) {
|
||||
this.config = config;
|
||||
this.bridge = bridge;
|
||||
this.silence = silence;
|
||||
this.isDebug = isDebug;
|
||||
}
|
||||
|
||||
init(): Promise<any> {
|
||||
@ -27,13 +29,17 @@ export default class VerdaccioProcess implements IServerProcess {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
this.childFork = fork(verdaccioRegisterWrap,
|
||||
['-c', this.config.configPath],
|
||||
{
|
||||
silent: this.silence,
|
||||
let childOptions = {
|
||||
silent: this.silence
|
||||
};
|
||||
|
||||
if (this.isDebug) {
|
||||
childOptions = Object.assign({}, childOptions, {
|
||||
execArgv: [`--inspect=${this.config.port + 5}`]
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
this.childFork = fork(verdaccioRegisterWrap, ['-c', this.config.configPath], childOptions);
|
||||
|
||||
this.childFork.on('message', (msg) => {
|
||||
if ('verdaccio_started' in msg) {
|
||||
|
@ -20,6 +20,7 @@ export interface IServerProcess {
|
||||
bridge: IServerBridge;
|
||||
config: IVerdaccioConfig;
|
||||
childFork: any;
|
||||
isDebug: boolean;
|
||||
silence: boolean;
|
||||
init(): Promise<any>;
|
||||
stop(): void;
|
||||
|
@ -48,6 +48,7 @@ describe('<Package /> component', () => {
|
||||
).toEqual('By: Sam');
|
||||
expect(wrapper.find('p').text()).toEqual('Private NPM repository');
|
||||
expect(wrapper.find('.license').text()).toMatch(/MIT/);
|
||||
expect(wrapper.html()).toMatchSnapshot();
|
||||
// FIXME: >Published about 2 months ago
|
||||
// expect(wrapper.html()).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user