Developer¶
Cheat Codes¶
Cheat codes are meant to expose functionality that shouldn’t otherwise be available. They can be activated by passing cheatCodesEnabled as an option to the HiGlassComponent and then typing a string when a higlass window is visible.
- “hgedit”: Toggle the header and make the higlass component editable.
Testing¶
To run the tests use:
npm run test-watch
To only run specific test suites, open karma.conf.js
and
select which tests to run.
All http requests can be automatically mocked and their responses stored in test/mocked-responses
. This makes it possible to use a local higlass server when adding new tests. New tests that use data which has not been already stored, should be run a few times locally in order to mock all occuring http requests.
Please note: When adding new viewConfigs that make use of mocked responses, make sure that links do not start with //
but with http(s)://
. The mocking library fetch-mock
that we are using, does not support links without protocol. In order get started with mocked responses, follow the setup of FetchMockHelper
as in DenseDataExtremaTests
.
JSON Schema¶
There are unit tests that validate all the viewconfs that have been checked in as fixtures. If you want to validate just one viewconf by hand:
npm install -g ajv-cli
ajv validate -s app/schema.json -d docs/examples/viewconfs/default.json
Boilerplate¶
Use the following template and replace individual it
blocks
to set up new tests. Add this code to the tests directory and
add a line to karma.conf.js to include it in the tests.
/* eslint-env node, jasmine */
import {
configure,
// render,
} from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import { expect } from 'chai';
// Utils
import {
mountHGComponent,
removeHGComponent,
getTrackObjectFromHGC
} from '../app/scripts/utils';
configure({ adapter: new Adapter() });
describe('Horizontal heatmaps', () => {
let hgc = null;
let div = null;
beforeAll((done) => {
([div, hgc] = mountHGComponent(div, hgc,
viewconf,
done,
{
style: 'width:800px; height:400px; background-color: lightgreen',
bounded: true,
})
);
});
it('should respect zoom limits', () => {
// add your tests here
const trackObj = getTrackObjectFromHGC(hgc.instance(), 'vv', 'tt');
expect(trackObj.calculateZoomLevel()).to.eql(1);
});
afterAll(() => {
removeHGComponent(div);
});
});
// enter either a viewconf link or a viewconf object
const viewconf = {
"editable": true,
"zoomFixed": false,
"trackSourceServers": [
"/api/v1",
"http://higlass.io/api/v1"
],
"exportViewUrl": "/api/v1/viewconfs/",
"views": [
{
"tracks": {}
"uid": "vv"
}
],
}
Convenience Functions¶
To get the track object associated with a view and track uid:
import {
getTrackObjectFromHGC
} from '../app/scripts/utils';
const trackObj = getTrackObjectFromHGC(hgc.instance(),
'view_uid', 'track_uid')
Contributor Guidelines¶
Contributions are in the form of issues, code, documentation are always very welcome. The following are a set of guidelines to help ensure that contributions can be smoothly merged into the existing code base:
- All code contributions should be accompanied by a test. Tests can be placed into the test folder.
- All added functions should include a jsdoc string for javascript code or a numpy style docstring for python code.