mirror of
https://github.com/appium/appium.git
synced 2026-05-24 12:58:49 -05:00
70d88cb86f
- `@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`
159 lines
3.4 KiB
Markdown
159 lines
3.4 KiB
Markdown
@appium/test-support
|
|
===================
|
|
|
|
A collection of test utility lib used across Appium packages.
|
|
|
|
[](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
|
|
```
|