mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-06-05 20:02:05 +08:00
Working on Jest
This commit is contained in:
99
jest/jest-tests.ts
Normal file
99
jest/jest-tests.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
/// <reference path="jest.d.ts" />
|
||||
|
||||
// Tests based on the Jest website
|
||||
jest.dontMock('../sum');
|
||||
|
||||
describe('sum', function() {
|
||||
it('adds 1 + 2 to equal 3', function() {
|
||||
var sum: (a: number, b: number) => number = require('../sum');
|
||||
expect(sum(1, 2)).toBe(3);
|
||||
});
|
||||
});
|
||||
|
||||
describe('fetchCurrentUser', function() {
|
||||
it('calls the callback when $.ajax requests are finished', function() {
|
||||
var $ = require('jquery');
|
||||
var fetchCurrentUser = require('../fetchCurrentUser');
|
||||
|
||||
// Create a mock function for our callback
|
||||
var callback = jest.genMockFunction();
|
||||
fetchCurrentUser(callback);
|
||||
|
||||
// Now we emulate the process by which `$.ajax` would execute its own
|
||||
// callback
|
||||
$.ajax.mock.calls[0 /*first call*/][0 /*first argument*/].success({
|
||||
firstName: 'Bobby',
|
||||
lastName: '");DROP TABLE Users;--'
|
||||
});
|
||||
|
||||
// And finally we assert that this emulated call by `$.ajax` incurred a
|
||||
// call back into the mock function we provided as a callback
|
||||
expect(callback.mock.calls[0/*first call*/][0/*first arg*/]).toEqual({
|
||||
loggedIn: true,
|
||||
fullName: 'Bobby ");DROP TABLE Users;--'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
jest.dontMock('../displayUser.js')
|
||||
jest.dontMock('jquery');
|
||||
|
||||
describe('displayUser', function() {
|
||||
it('displays a user after a click', function() {
|
||||
// Set up our document body
|
||||
document.body.innerHTML =
|
||||
'<div>' +
|
||||
' <span id="username" />' +
|
||||
' <button id="button" />' +
|
||||
'</div>';
|
||||
|
||||
var displayUser = require('../displayUser');
|
||||
var $ = require('jquery');
|
||||
var fetchCurrentUser = require('../fetchCurrentUser');
|
||||
|
||||
// Tell the fetchCurrentUser mock function to automatically invoke
|
||||
// its callback with some data
|
||||
fetchCurrentUser.mockImplementation(function(cb: Function) {
|
||||
cb({
|
||||
loggedIn: true,
|
||||
fullName: 'Johnny Cash'
|
||||
});
|
||||
});
|
||||
|
||||
// Use jquery to emulate a click on our button
|
||||
$('#button').click();
|
||||
|
||||
// Assert that the fetchCurrentUser function was called, and that the
|
||||
// #username span's innter text was updated as we'd it expect.
|
||||
expect(fetchCurrentUser).toBeCalled();
|
||||
expect($('#username').text()).toEqual('Johnny Cash - Logged In');
|
||||
});
|
||||
});
|
||||
|
||||
jest.dontMock('../CheckboxWithLabel.js');
|
||||
describe('CheckboxWithLabel', function() {
|
||||
it('changes the text after click', function() {
|
||||
var React = require('react/addons');
|
||||
var CheckboxWithLabel = require('../CheckboxWithLabel.js');
|
||||
var TestUtils = React.addons.TestUtils;
|
||||
|
||||
// Render a checkbox with label in the document
|
||||
var checkbox = TestUtils.renderIntoDocument(
|
||||
CheckboxWithLabel({
|
||||
labelOn: "On",
|
||||
labelOff: "Off"
|
||||
})
|
||||
);
|
||||
|
||||
// Verify that it's Off by default
|
||||
var label = TestUtils.findRenderedDOMComponentWithTag(
|
||||
checkbox, 'label');
|
||||
expect(label.getDOMNode().textContent).toEqual('Off');
|
||||
|
||||
// Simulate a click and verify that it is now On
|
||||
var input = TestUtils.findRenderedDOMComponentWithTag(
|
||||
checkbox, 'input');
|
||||
TestUtils.Simulate.change(input);
|
||||
expect(label.getDOMNode().textContent).toEqual('On');
|
||||
});
|
||||
});
|
||||
70
jest/jest.d.ts
vendored
Normal file
70
jest/jest.d.ts
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
// Type definitions for Jest 0.1.18
|
||||
// Project: http://facebook.github.io/jest/
|
||||
// Definitions by: Phips Peter <https://github.com/pspeter3/>
|
||||
// Definitions: https://github.com/borisyankov/DefinitelyTyped
|
||||
|
||||
declare function describe(name: string, fn: jest.EmptyFunction): void;
|
||||
declare function expect(actual: any): jest.Matchers;
|
||||
declare var it: jest.It;
|
||||
declare var require: jest.Require;
|
||||
|
||||
declare module jest {
|
||||
function autoMockOff(): void;
|
||||
function autoMockOn(): void;
|
||||
function clearAllTimers(): void;
|
||||
function dontMock(moduleName: string): void;
|
||||
function genMockFromModule(moduleName: string): Mock;
|
||||
function genMockFunction(): Mock;
|
||||
function genMockFn(): Mock;
|
||||
function mock(moduleName: string): void;
|
||||
function runAllTicks(): void;
|
||||
function runAllTimers(): void;
|
||||
|
||||
interface EmptyFunction {
|
||||
(): void;
|
||||
}
|
||||
|
||||
interface Matchers {
|
||||
not: Matchers;
|
||||
toThrow(expected?: any): boolean;
|
||||
toBe(expected: any): boolean;
|
||||
toEqual(expected: any): boolean;
|
||||
toBeFalsy(): boolean;
|
||||
toBeTruthy(): boolean;
|
||||
toBeNull(): boolean;
|
||||
toBeUndefined(): boolean;
|
||||
toMatch(expected: RegExp): boolean;
|
||||
toContain(expected: string): boolean;
|
||||
toBeCloseTo(expected: number, delta: number): boolean;
|
||||
toBeGreaterThen(expected: number): boolean;
|
||||
toBeLessThen(expected: number): boolean;
|
||||
toBeCalled(): boolean;
|
||||
toBeCalledWith(...args: any[]): boolean;
|
||||
lastCalledWith(...args: any[]): boolean;
|
||||
}
|
||||
|
||||
interface It {
|
||||
(name: string, fn: EmptyFunction): void;
|
||||
only(name: string, fn: EmptyFunction): void;
|
||||
}
|
||||
|
||||
interface Require {
|
||||
(moduleName: string): any;
|
||||
requireActual(moduleName: string): any;
|
||||
}
|
||||
|
||||
interface Mock {
|
||||
mock: MockContext;
|
||||
mockClear(): void;
|
||||
mockImplementation(fn: Function): void;
|
||||
mockImpl(fn: Function): void;
|
||||
mockReturnThis(): void;
|
||||
mockReturnValue(value: any): void;
|
||||
mockReturnValueOnce(value: any): void;
|
||||
}
|
||||
|
||||
interface MockContext {
|
||||
calls: any[][];
|
||||
instances: any[][];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user