摩卡测试嵌套模型

时间:2016-12-27 03:01:44

标签: express mongoose ecmascript-6 mocha

尝试为嵌套模型编写测试但无法使其正常工作:

型号:

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

以上给出: TypeError:无法读取属性' push'未定义的

我尝试过其他一些事情,但这是最有希望的结果,出于某种原因,我似乎无法将嵌入式模型作为设置单元测试的一部分。

1 个答案:

答案 0 :(得分:1)

我最终解决了这个问题,希望将来可以帮助某人。

<强>测试

if (req.body.employees != null) {      
    req.body.employees.forEach(function(employee) {      
      company.employees.push(employee);
    }, this);
  }  

<强>控制器: 添加它以处理多个添加:

iron-scroll-threshold