UNPKG

3.55 kBJavaScriptView Raw
1/*jshint newcap: false */
2/*global describe, it */
3'use strict';
4var expect = require('expect.js'),
5 React = require('react'),
6 DocumentTitle = require('../');
7
8describe('DocumentTitle', function () {
9 it('has a displayName', function () {
10 var el = React.createElement(DocumentTitle);
11 expect(el.type.displayName).to.be.a('string');
12 expect(el.type.displayName).not.to.be.empty();
13 });
14 it('hides itself from the DOM', function () {
15 var Component = React.createClass({
16 render: function () {
17 return React.createElement(DocumentTitle, {title: 'irrelevant'},
18 React.createElement('div', null, 'hello')
19 );
20 }
21 });
22 var markup = React.renderToStaticMarkup(React.createElement(Component));
23 expect(markup).to.equal('<div>hello</div>');
24 });
25 it('throws an error if it has multiple children', function (done) {
26 var Component = React.createClass({
27 render: function () {
28 return React.createElement(DocumentTitle, {title: 'irrelevant'},
29 React.createElement('div', null, 'hello'),
30 React.createElement('div', null, 'world')
31 );
32 }
33 });
34 expect(function () {
35 React.renderToStaticMarkup(React.createElement(Component));
36 }).to.throwException(function (e) {
37 expect(e.message).to.match(/^Invariant Violation:/);
38 done();
39 });
40 });
41 it('works with complex children', function () {
42 var Component1 = React.createClass({
43 render: function() {
44 return React.createElement('p', null,
45 React.createElement('span', null, 'c'),
46 React.createElement('span', null, 'd')
47 );
48 }
49 });
50 var Component2 = React.createClass({
51 render: function () {
52 return React.createElement(DocumentTitle, {title: 'irrelevant'},
53 React.createElement('div', null,
54 React.createElement('div', null, 'a'),
55 React.createElement('div', null, 'b'),
56 React.createElement('div', null, React.createElement(Component1))
57 )
58 );
59 }
60 });
61 var markup = React.renderToStaticMarkup(React.createElement(Component2));
62 expect(markup).to.equal(
63 '<div>' +
64 '<div>a</div>' +
65 '<div>b</div>' +
66 '<div>' +
67 '<p>' +
68 '<span>c</span>' +
69 '<span>d</span>' +
70 '</p>' +
71 '</div>' +
72 '</div>'
73 );
74 });
75});
76
77describe('DocumentTitle.rewind', function () {
78 it('clears the mounted instances', function () {
79 React.renderToStaticMarkup(
80 React.createElement(DocumentTitle, {title: 'a'},
81 React.createElement(DocumentTitle, {title: 'b'}, React.createElement(DocumentTitle, {title: 'c'}))
82 )
83 );
84 expect(DocumentTitle.peek()).to.equal('c');
85 DocumentTitle.rewind();
86 expect(DocumentTitle.peek()).to.equal(null);
87 });
88 it('returns the latest document title', function () {
89 var title = 'cheese';
90 React.renderToStaticMarkup(
91 React.createElement(DocumentTitle, {title: 'a'},
92 React.createElement(DocumentTitle, {title: 'b'}, React.createElement(DocumentTitle, {title: title}))
93 )
94 );
95 expect(DocumentTitle.rewind()).to.equal(title);
96 });
97 it('returns nothing if no mounted instances exist', function () {
98 React.renderToStaticMarkup(
99 React.createElement(DocumentTitle, {title: 'a'},
100 React.createElement(DocumentTitle, {title: 'b'}, React.createElement(DocumentTitle, {title: 'c'}))
101 )
102 );
103 DocumentTitle.rewind();
104 expect(DocumentTitle.peek()).to.equal(null);
105 });
106});