简体   繁体   中英

Test plain javascript file returning different objects

Is it possible to test the code below with Jasmine testing tool or any other npm module like rewire or similar?

const AuthValidatorDumb = require('./src/AuthValidatorDumb');
const AuthValidator = require('./src/AuthValidator');
const config = require('../config');

let instance;

if (!instance) {
  if (config.get('auth.enabled')) {
    instance = AuthValidator;
  } else {
    instance = AuthValidatorDumb;
  }
}

module.exports = instance;

I've got a variant for testing the code above.Suppose you have:

1) The code for index.js in the question above.

2) AuthValidator.js :

class AuthValidator {}
module.exports = AuthValidator;

3) AuthValidatorDumb.js :

class AuthValidatorDumb {}
module.exports = AuthValidatorDumb;

Here is test/index.spec.js :

const proxyquire = require('proxyquire');
const AuthValidator = require('../src/AuthValidator');
const AuthValidatorDumb = require('../src/AuthValidatorDumb');

describe('auth index', () => {
  it('should return AuthValidator', () => {
    const configMock = { get: () => 'sth' };
    const Instance = proxyquire('../index', {
      '../config': configMock,
    });
    expect(new Instance() instanceof AuthValidator).toBeTruthy();
  });

  it('should return AuthValidatorDumb', () => {
    const configMock = { get: () => undefined };
    const Instance = proxyquire('../index', {
      '../config': configMock,
    });
    expect(new Instance() instanceof AuthValidatorDumb).toBeTruthy();
  });
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM