将这些常见的断言保存在一个单独的文件中并且不再重复是个好主意吗?

Is it a good idea to save these common assertions in a seprate file and not repeat it?

将这些常见的断言保存在一个单独的文件中并且不再重复是个好主意吗?我是这样写的,因为它是 bdd 格式。如果是,我该怎么做

var expect  = require('chai').expect;
var request = require('request');
var chai = require('chai')
  , chaiHttp = require('chai-http');

chai.use(chaiHttp);
var should = chai.should();


describe('Employees', function() {
    var url = 'http://localhost:3000';

    it('Returns Employees', function(done) { // <= Pass in done callback
       chai.request(url)
       .get('/employees')
       .end(function(err, res) {
       expect(res).to.have.status(200);
       res.should.be.json;
       res.body.forEach((item) => {
       item.should.have.property("first_name");
       item.should.have.property("last_name");
       item.should.have.property("email");
       item.should.have.property("id");
       })
       done(); });
});

    it('Add an Employee', function(done) { // <= Pass in done callback
       chai.request(url)
       .post('/employees')
       .send({"first_name": "asdad", "last_name": "asdasd", "email": "asdasd@example.com"})
       .end(function(err, res) {
       expect(res).to.have.status(201);
       res.should.be.json;
       res.body.should.have.property("first_name");
       res.body.should.have.property("last_name");
       res.body.should.have.property("email");
       global.idVariable = res.body.id;
       done(); });
});

似乎以下只是重复:

expect(res).to.have.status(200);
           res.should.be.json;
           res.body.forEach((item) => {
           item.should.have.property("first_name");
           item.should.have.property("last_name");
           item.should.have.property("email");
           item.should.have.property("id");
           })

也许您可以 将这些常见的 Employee 相关断言包装到一个函数中?然后 在每个测试的基础上为每个需要的测试调用这个 EmployeeAssertion 函数断言员工响应以验证普通员工属性。我不知道将此断言检查分离到另一个文件是否有意义,除非在多个测试文件中需要您的员工断言检查功能。要记住的主要事情是:每个单独的单元测试都应该测试一件事,并且应该相互隔离。创建共享断言函数没有坏处,以便实施 (DRY) 不要重复自己的原则 只要此函数仅包含 跨每个员工相关测试和状态的最低限度的共性不被记住每个测试,以确保测试之间的隔离。

例如,以下内容:

var expect  = require('chai').expect;
var request = require('request');
var chai = require('chai')
  , chaiHttp = require('chai-http');

chai.use(chaiHttp);
var should = chai.should();

const assertEmployeeAttrs = (res) => {
    res.should.be.json;
    res.body.forEach((item) => {
      // common employee attributes 
      item.should.have.property("first_name");
      item.should.have.property("last_name");
      item.should.have.property("email");
    })
};


describe('Employees', function() {
    var url = 'http://localhost:3000';

    it('Returns Employees', function(done) { // <= Pass in done callback
       chai.request(url)
       .get('/employees')
       .end(function(err, res) {
       // unique assertions per test i.e. res status codes, etc...
       expect(res).to.have.status(200);
       // common assertions across each employee test. i.e. base employee attributes
       assertEmployeeAttrs(res);
       done(); });
});

    it('Add an Employee', function(done) { // <= Pass in done callback
       chai.request(url)
       .post('/employees')
       .send({"first_name": "asdad", "last_name": "asdasd", "email": "asdasd@example.com"})
       .end(function(err, res) {
       // unique attributes 
       expect(res).to.have.status(201);
       // common employee attributes  
       assertEmployeeAttrs(res);
       global.idVariable = res.body.id;
       done(); });
});

回应您的附加问题:如何将此 Employee 断言检查添加到单独的文件中并从另一个文件调用它?

方法如下:

  1. 将此 Employee 断言代码检查代码添加到另一个文件中。
  2. 使用 module.exports 导出这个新添加的功能。
  3. require 将此新代码添加到任何需要使用此员工断言检查的文件中,并像以前一样使用。

代码如下所示:

employeeAssert.js(新文件)

var expect  = require('chai').expect;
var request = require('request');
var chai = require('chai');
var chaiHttp = require('chai-http');

chai.use(chaiHttp);
var should = chai.should()

let employeeAssert = {};

employeeAssert.hasAttrs = (res) => {
   res.should.be.json;
   res.body.forEach((item) => {
      // common employee attributes 
      item.should.have.property("first_name");
      item.should.have.property("last_name");
      item.should.have.property("email");
   })
};

module.exports = employeeAssert;

使用员工断言检查的文件:

var expect  = require('chai').expect;
var request = require('request');
var chai = require('chai');
var chaiHttp = require('chai-http');
// change path as appropriate, for now we assume the same parent dir
var employeeAssert = require('./employeeAssert);

chai.use(chaiHttp);
var should = chai.should();

describe('Employees', function() {
var url = 'http://localhost:3000';

it('Returns Employees', function(done) { // <= Pass in done callback
     chai.request(url)
     .get('/employees')
     .end(function(err, res) {
        expect(res).to.have.status(200);
        employeeAssert.hasAttrs(res);
        done(); 
     });
 });