将这些常见断言保存在seprate文件中而不重复它是个好主意吗



将这些常见断言保存在单独的文件中而不重复是个好主意吗?我是这样写的,因为它是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相关的断言封装到一个函数中然后为每个需要断言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将此新代码放入任何需要使用此Employee Assertion检查的文件中,并使用与以前相同的代码

在代码中,这看起来如下:

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

最新更新