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)
+ })
+})