CRUD 작업을 수행하기 위해 express-cassandra를 사용하고 있습니다. 서비스를 실행하고 우체국을 사용하여 API를 생성하면 모든 것이 예상대로 작동합니다.오류 "models.instance.QuestionnaireMaster가 생성자가 아닙니다."node.js가있는 express-cassandra
그러나 chai 테스트 케이스를 사용하여 동일한 컨트롤러 함수를 호출 할 때 "models.instance.table은 생성자가 아닙니다."라는 오류 메시지가 표시됩니다.
dbClient.js : 카산드라와 초기화하는 연결
var models = require('express-cassandra');
var settings = require('../../settings.js');
var config = settings.UserService.database.cql;
//Tell express-cassandra to use the models-directory, and
//use bind() to load the models using cassandra configurations.
models.setDirectory(__dirname).bind(
{
clientOptions: {
contactPoints: [config.host],
protocolOptions: { port: config.port },
keyspace: config.databaseName,
queryOptions: {consistency: models.consistencies.one}
},
ormOptions: {
//If your keyspace doesn't exist it will be created automatically
//using the default replication strategy provided here.
defaultReplicationStrategy : {
class: 'SimpleStrategy',
replication_factor: 1
},
migration: 'safe',
createKeyspace: true
}
},
function(err) {
if(err) console.log(err);
else console.log(models.timeuuid());
}
);
module.exports = models ;
QuestionnaireMasterModel.js : 모델
"use strict";
module.exports = {
fields: {
id: {
type: "uuid",
default: { "$db_function": "uuid()" }
},
questionnaire_type: "varchar",
question: "varchar",
response_option: {
type: "list",
typeDef: "<varchar>"
},
owner_rolecode: "varchar",
is_active: "boolean",
created: {
type: "timestamp",
default: { "$db_function": "toTimestamp(now())" }
},
updated: {
type: "timestamp",
default: { "$db_function": "toTimestamp(now())" }
}
},
key: ["id"],
table_name: "questionnaire_master"
}
코드 조각입니다 16,
questionnaire_master.js : API가 호출되는 경우 호출() 새로운 엔트리
var questionnaireMasterController = {};
var models = require('../models/dbCLient');
//var questionnaireMasterModel = require('../models/QuestionnaireMasterModel');
var responseEntity = require('../utility/response_entity');
questionnaireMasterController.createQuestionnaire = function (params, callback) {
\t var uuid = models.uuid();
\t var question = new models.instance.QuestionnaireMaster({
\t \t id : uuid,
\t \t questionnaire_type : params.questionnaire_type,
\t \t question: params.question,
\t \t response_option : params.response_option,
\t \t owner_rolecode : params.owner_rolecode, \t \t
\t \t is_active: true
\t });
\t question.save(function (err) {
\t \t if (err) {
\t \t \t if(err.name = 'apollo.model.validator.invalidvalue')
\t \t \t \t responseEntity.sendResponse(422, 'Invalid input paramters', null, {name : err.name, message : err.message},callback);
\t \t \t else
\t \t \t \t responseEntity.sendResponse(501, 'Error Occured', null, {name : err.name, message : err.message},callback);
\t \t \t console.log("err ::: ",err);
\t \t \t return;
\t \t }
\t \t responseEntity.sendResponse(201,"Question created successfully", { id: uuid }, null ,callback);
\t \t console.log('Yuppiie!');
\t }); \t
}
// User controller functions and expose it to app
module.exports = questionnaireMasterController;
createQuestionnaire를 생성 컨트롤러 기능. 잘 작동합니다. 나를
var chai = require('chai');
var expect = chai.expect;
var chaiHttp = require('chai-http');
var randomstring = require("randomstring");
var questionnaireMasterController = require('../controller/questionnaire_master.js')
chai.use(chaiHttp);
var supertest = require('supertest');
describe('Check for create Patient', function() {
it('Should create a new question in questionnaire master table', function (done) {
var question = {
"questionnaire_type": "Select one",
"question": "This is dummy question",
"response_option": ["dummyoption1", "dummyoption2"],
"owner_rolecode": "01",
"is_active": true
};
questionnaireMasterController.createQuestionnaire(question, function (result) {
JSON.stringify(result);
expect(result.code).to.be.a('number').eq(201);
done();
});
});
});
createQuestionnaire()를 다시 questionnaire_master_test.js에서 호출을 오류 제공 테스트 케이스 :
는을 questionnaire_master_test.js. 다음과 같은 오류를 반환 : 모델이로드되지 않을 때
TypeError: models.instance.QuestionnaireMaster is not a constructor
at Object.questionnaireMasterController.createQuestionnaire (controller\questionnaire_master.js:9:877)
at Context.<anonymous> (test\questionnaire_master_test.js:20:39)