From a974527bcef904ab5702ed1c2ffcc9e37146511a Mon Sep 17 00:00:00 2001 From: Yoshua Wuyts Date: Sun, 22 May 2016 16:58:14 +0900 Subject: [PATCH] test: add --- package.json | 6 ++-- tests/index.js | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 tests/index.js diff --git a/package.json b/package.json index c9c9e31..f90be2b 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "description": "A framework for creating solid web applications", "main": "index.js", "scripts": { - "deps": "dependency-check . && dependency-check . --extra --no-dev", - "test": "standard && npm run deps && NODE_ENV=test node test", - "test:cov": "standard && npm run deps && NODE_ENV=test istanbul cover test.js" + "deps": "dependency-check . && dependency-check . --extra --no-dev -i xhr", + "test": "standard && npm run deps && NODE_ENV=test node tests/*", + "test:cov": "standard && npm run deps && NODE_ENV=test istanbul cover tests/*" }, "repository": "yoshuawuyts/choo", "keywords": [ diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..e71a307 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,76 @@ +const tape = require('tape') +const choo = require('../') + +tape('should render on the server', function (t) { + t.test('should render a static response', function (t) { + t.plan(1) + + const app = choo() + app.router((route) => [ + route('/', () => choo.view`

Hello Tokyo!

`) + ]) + + const html = app.toString('/') + const expected = '

Hello Tokyo!

' + t.equal(html, expected, 'strings are equal') + }) + + t.test('should accept a state object', function (t) { + t.plan(1) + + const app = choo() + app.router((route) => [ + route('/', function (params, state) { + return choo.view`

meow meow ${state.message}

` + }) + ]) + + const html = app.toString('/', { message: 'nyan!' }) + const expected = '

meow meow nyan!

' + t.equal(html, expected, 'strings are equal') + }) + + t.test('should extend existing models', function (t) { + t.plan(1) + + const app = choo() + app.model({ state: { bin: 'baz', beep: 'boop' } }) + app.router((route) => [ + route('/', function (params, state) { + return choo.view`

${state.foo} ${state.bin} ${state.beep}

` + }) + ]) + + const state = { foo: 'bar!', beep: 'beep' } + const html = app.toString('/', state) + const expected = '

bar! baz beep

' + t.equal(html, expected, 'strings are equal') + }) + + t.test('should throw if called without route', function (t) { + t.plan(1) + + const app = choo() + app.router((route) => [ + route('/', function (params, state, send) { + send('hey!') + }) + ]) + + t.throws(app.toString.bind(null), /route must be a string/) + }) + + t.test('should throw if calling send()', function (t) { + t.plan(1) + + const app = choo() + app.router((route) => [ + route('/', function (params, state, send) { + send('hey!') + }) + ]) + + const msg = /send\(\) cannot be called on the server/ + t.throws(app.toString.bind(null, '/', { message: 'nyan!' }), msg) + }) +})