Я пытаюсь выполнить простой тест кармы, который проверяет, обладает ли созданная модель всеми необходимыми свойствами.
Но когда я импортирую модель, я получаю сообщение об ошибке, что модель не является конструктором
test.ts
import { Person } from '../src/models/person.model';
import { expect } from 'chai';
describe('Test', () => {
it('should succeed', function (done) {
console.log(Person) // Returns null;
setTimeout(done, 1000)
});
it('should be invalid if email is empty', function (done) {
let person = new Person({ firstName: 'test' });
setTimeout(done, 1000)
person.validate(function (err: any) {
expect(err.errors.email).to.exist;
done();
});
});
})
person.model.ts
import { Document, Model, model, Schema, Mongoose } from 'mongoose';
export interface PersonModel extends Document {
_id: string;
email: string;
password: string;
firstName: string;
lastName: string;
profileImage: string;
aboutMe: string;
city: string;
dateOfBirth: Date;
diagnoses: string;
hobbies: string;
isOnline: boolean;
isAdmin: string;
token: string;
deActivatedAccount: boolean;
}
const PersonSchema = new Schema({
email: {
type: String, unique: true, required: 'Email can\'t be empty',
},
password: String,
firstName: String,
lastName: String,
profileImage: String,
aboutMe: String,
city: String,
dateOfBirth: Date,
diagnoses: String,
hobbies: String,
isOnline: Boolean,
isAdmin: String,
token: String,
deActivatedAccount: Boolean,
});
export const Person: Model<PersonModel> = model<PersonModel>(
'Person',
PersonSchema
);
webpack.test.config
const webpack = require('webpack');
const path = require('path');
module.exports = {
devtool: 'inline-source-map',
mode: 'development',
resolve: {
extensions: ['.js', '.ts']
},
module: {
rules: [
{
test: /\.(js|jsx|tsx|ts)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
'@babel/preset-env',
"@babel/preset-typescript"
],
plugins: [
"@babel/proposal-class-properties",
"@babel/proposal-object-rest-spread"
]
}
}
}
]
},
output: {
// the output file name
filename: 'index.js',
path: path.resolve(__dirname, 'build'),
library: "my-library",
libraryTarget: "umd" // exposes and know when to use module.exports or exports.
},
}
karma.conf
var webpackConfig = require('./webpack.test.config.js');
webpackConfig.entry = undefined;
webpackConfig.mode = "development";
module.exports = (config) => {
config.set({
browsers: ["ChromeHeadless"],
frameworks: ["mocha", "chai"],
plugins: [
"karma-typescript",
"karma-mocha",
"karma-mocha-reporter",
"karma-chai",
"karma-webpack",
"karma-chai-as-promised",
"karma-chrome-launcher"
],
reporters: ["mocha"],// mocha gives a nice summary of the results.
files: [
"src/test.ts"
],
preprocessors: {
"src/test.ts": ["webpack"]
},
webpack: webpackConfig,
})
};
test.ts
При выполнении этого теста я получаю следующую ошибку:
Ошибка типа: _src_models_person_model__WEBPACK_IMPORTED_MODULE_1 __. Person не является конструктором
в контексте. (index.js: 52032: 18)
Может кто-нибудь помочь мне решить это?
Если я запускаю его без импорта модели, первый тест завершается успешно. так что я думаю, что перенос TS и т. д. идет хорошо.