Files
appium/packages/test-support/README.md
T
Christopher Hiller 70d88cb86f feat(appium,base-driver,base-plugin,test-support,types): move test fixtures into test-support
- `@appium/test-support` now exports the e2e setup for plugins, and e2e/unit suites for drivers from base-driver.  it also generates declarations.
- `appium` exports this as `appium/test`.
- The `capability.spec.js` unit test for basedriver now avoids spying on the "global" logger, due to test flake.  It now spies directly on the function which calls the global logger. (@mykola_mokhnach)
- removed homebrew ansi-stripping code from `test-support` and replaced with `@colors/colors`
- type fixes and refactors for `@appium/test-support`
- type fixes for `appium`
- simplify `lib/index.js` of `@appium/base-driver`
2022-07-18 15:58:21 -07:00

159 lines
3.4 KiB
Markdown

@appium/test-support
===================
A collection of test utility lib used across Appium packages.
[![Build Status](https://travis-ci.org/appium/@appium/test-support.svg?branch=master)](https://travis-ci.org/appium/@appium/test-support)
## Install
```
npm install @appium/test-support --save-dev
```
## Api
### stubEnv
```js
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
```js
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).
```js
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.
```js
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
```js
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](https://travis-ci.org/), 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
## Watch
```
npm run watch
```
## Test
```
npm test
```