Попытка написать тест для вложенной модели, но не может получить его работу:Мокко Тестирование Вложенные модели
Модель:
const EmployeeSchema = new mongoose.Schema({
firstName: {type: String, required: true},
lastName: { type: String, required: true}
});
const CompanySchema = new mongoose.Schema({
name: { type: String, required: true },
streetAddress: { type: String, required: true },
country: { type: String, required: true },
employees:[EmployeeSchema]
}, { timestamps: true});
Контроллер:
function create(req, res, next) {
const company = new Company({
name: req.body.name,
streetAddress: req.body.streetAddress,
country: req.body.country
});
company.employees.push(req.employees);
company.save()
.then(savedCompany => res.json(savedCompany))
.catch(e => next(e));
}
Тест:
describe('## Company APIs',() => {
let company = {
name: "Test Company",
streetAddress: "123 Fake Street",
country: "A Country"
};
company.employees.push({firstName: "Jane", lastName: "Doe"});
describe('# POST /api/company',() => {
it('should create a new company', (done) => {
request(app)
.post('/api/company')
.send(company)
.expect(httpStatus.OK)
.then((res) => {
expect(res.body.name).to.equal(company.name);
expect(res.body.streetAddress).to.equal(company.streetAddress);
expect(res.body.country).to.equal(company.country);
company = res.body;
done();
})
.catch(done);
});
});
Приведенное выше дает: ТипError: Не удается прочитать свойство «push» undefined
Я пробовал еще несколько вещей, но это самый многообещающий результат, по какой-то причине я просто не могу заполнить встроенную модель как часть настройки до единичного теста.
Это не может быть ответом, но я заметил, что эта строка 'company.employees. push ({firstName: "Jane", lastName: "Doe"}); 'в тесте. Он пытается вытолкнуть объект «сотрудники», которого нет в компании. И он не утверждает 'company.employees', тогда я думаю, вы можете удалить эту строку – PunNeng