2017-09-28 13 views
0

データベースクエリをテストしようとしましたが、私はObjectionとそのようなORMとknexを使用しています。nodejsアプリケーションでsqlite3を使用してテストに失敗しました

プロジェクトアプリの構造:

/project-sqlite 
    /__tests__ 
    routes.test.js 
    /models 
    user.js 
    /node_modules 
    -app.js 
    -package-lock.json 
    -package.json 
    -user.db 

モデル/ user.jsの:

const objection = require('objection'); 
const Model = objection.Model; 
const Knex = require('knex'); 

const knex = Knex({ 
    client: 'sqlite3', 
    useNullAsDefault: true, 
    connection: { 
    filename: './user.db' 
    } 
}); 

Model.knex(knex); 

// Create database schema. You should use knex migration files to do this. We 
// create it here for simplicity. 
const schemaPromise = knex.schema.createTableIfNotExists('user', table => { 
    table.increments('id').primary(); 
    table.string('name'); 
}); 

class User extends Model { 
    static get tableName() { 
    return 'user'; 
    } 

    static get jsonSchema() { 
    return { 
     type: 'object', 
     required: ['name'], 

     properties: { 
     id: { type: 'integer' }, 
     name: { type: 'string', minLength: 1, maxLength: 255 } 
     } 
    }; 
    } 
}; 

schemaPromise.then(() => { 
    return User.query().insert({name: 'User 1'}); 
}).then(user => { 
    console.log('created: ', user.name, 'id: ', user.id); 
}); 

module.exports = User; 

app.js:

const express = require('express'); 
const User = require('./models/user'); 

app = express(); 

app.get('/users', (req, res) => { 
    const newUser = { 
    name: 'user 4050' 
    }; 
    User 
    .query() 
    .insert(newUser) 
    .then(user => { 
    res.writeHead(200, {'Content-type': 'text/json'}); 
    res.end(JSON.stringify(user)); 
    }) 

}) 

app.get('/users1', (req, res) => { 
    User 
    .query() 
    .then(user => { 
    res.writeHead(200, {'Content-type': 'text/json'}); 
    res.end(JSON.stringify(user)); 
    }) 

}) 

app.listen(3000,()=> { 
    console.log('server runs on localhost:3000'); 
}); 

テスト/routes.test。 js:

const user = require('../models/user'); 
describe('Test model User',() => { 
    test('should return User 1', (done) => { 
    user 
    .query() 
    .where('id', 1) 
    .then(userFounded => { 
     expect(userFounded.name).toEqual('User 1'); 
     done(); 
    }) 
    }); 
}); 

テストは、しかし、失敗した私は、一部のユーザーを挿入し、私はこのエラーを得た:

Test model User 
✕ should return User 1 (29ms) 

    ● Test model User › should return User 1 

    expect(received).toEqual(expected) 

    Expected value to equal: 
     "User 1" 
    Received: 
     undefined 

    Difference: 

     Comparing two different types of values. Expected string but received undefined. 
npm ERR! code ELIFECYCLE 
npm ERR! errno 1 
npm ERR! [email protected] test: `jest` 
npm ERR! Exit status 1 
npm ERR! 
npm ERR! Failed at the [email protected] test script. 
npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 

私は問題が何であるかを理解していません。これは、データが格納されていたファイルに接続していないか、または接続していないためですか?

答えて

0

userFoundedのタイプはオブジェクトではないため、userFounded.nameで使用するユーザーの名前を取得することはできません。

試してみてください。

expect(userFounde[0].name).toEqual('User 1') 
関連する問題