@appium/test-support
TypeScript icon, indicating that this package has built-in type declarations

3.0.35 • Public • Published

@appium/test-support

A collection of test utility libs used across Appium packages

NPM version Downloads

Installation

npm install @appium/test-support --save-dev

Usage

stubEnv

import { stubEnv } from '@appium/test-support';

describe('myTest', () => {
  stubEnv();
  it('setting env variable', () => {
    // Changes to process.env will stay local
    process.env.ABC = 'abc';
  });
});

stubLog

import { stubLog } from '@appium/test-support';

describe('myTest', () => {
  let sandbox;
  // configure sandbox here...

  it('stubbing log', () => {
    let logStub = stubLog(sandbox, log);
    log.info('Hello World!');
    log.warn(`The ${'sun'.yellow} is shining!`);
    logStub.output.should.equals([
      'info: Hello World!',
      `warn: The ${'sun'.yellow} is shining!`
    ].join('\n'));
  });
  it('stubbing log stripping colors', () => {
    let logStub = stubLog(sandbox, log, {stripColors: true});
    log.info('Hello World!');
    log.warn(`The ${'sun'.yellow} is shining!`);
    logStub.output.should.equals([
      'info: Hello World!',
      'warn: The sun is shining!'
    ].join('\n'));
  });
});

withSandbox

Use when mixing up sinon APIs (mocks, spies, stubs).

import { withSandbox } from '@appium/test-support';

let api = {
  abc: () => { return 'abc'; }
};

describe('MyTest', withSandbox({mocks: {api}}, (S) => {
  it('stubbing api, stubbing dog', () => {
    S.mocks.api.expects('abc').once().returns('efg');
    let dog = { bark: () => { return 'ouaf!'; } };
    S.sandbox.stub(dog, 'bark').returns('miaou');
    api.abc().should.equal('efg');
    dog.bark().should.equal('miaou');
    S.verify();
  });
}));

withMocks

When using mainly stubs.

import { withMocks } from '@appium/test-support';

let api = {
  abc: () => { return 'abc'; }
};

describe('withMocks', withMocks({api}, (mocks) => {
  it('should mock api', () => {
    mocks.api.expects('abc').once().returns('efg');
    api.abc().should.equal('efg');
    mocks.verify();
  });
}));

fakeTime

import { fakeTime } from '@appium/test-support';

function doSomething() {
  return new B.Promise((resolve) => {
    let ret = '';
    function appendOneByOne () {
      if(ret.length >= 10) {
        return resolve(ret);
      }
      setTimeout(() => {
        ret = ret + ret.length;
        appendOneByOne();
      }, 1000);
    }
    appendOneByOne();
  });
}

describe('fakeTime', () => {
  let sandbox;
  // create sandbox ...

  it('should fake time', async () => {
    let timeLord = fakeTime(sandbox);
    let p = doSomething();
    timeLord.speedup(200, 60); // interval=200, times=60
    (await p).should.equals('0123456789');
  });
});

Travis Android Emu Setup

On Travis, setting up an emulator takes a lot of boilerplate. While the configuration needs to be done on a case-by-case basis, the actual startup can be scripted. Toward that, there are two scripts:

  • android-emu-travis-pre - creates a device (configured with the environment variables ANDROID_EMU_NAME, ANDROID_EMU_TARGET, and ANDROID_EMU_ABI) and starts it in the background
  • android-emu-travis-post - waits for the device to be booted, and then goes to its home screen

License

Apache-2.0

Package Sidebar

Install

npm i @appium/test-support

Homepage

appium.io

Weekly Downloads

2,342

Version

3.0.35

License

Apache-2.0

Unpacked Size

49.7 kB

Total Files

47

Last publish

Collaborators

  • jlipps
  • nick.mokhnach
  • kazucocoa
  • boneskull