Может быть, вы могли бы просто обернуть эти общие утверждения, связанные с сотрудниками, в функцию? Затем вызывать эту функцию EmployeeAssertion для каждого теста для каждого теста, который должен утверждать ответ сотрудника для проверки общего сотрудника. атрибутов . Я не знаю, имеет ли смысл разделять эту проверку утверждений на другой файл, если только функция проверки утверждений сотрудника не требуется в нескольких тестовых файлах. Главное, что нужно помнить: каждый из ваших отдельных модульных тестов должен проверять одну вещь и быть изолированным друг от друга. Нет ничего плохого в создании функции общего утверждения для реализации * 1007. * (СУХОЙ) не повторяйте принцип , если эта функция содержит только минимум общностей для каждого теста, связанного с сотрудником, и состояние не запоминается в каждом тесте для обеспечения изоляции через тесты.
Например, что-то вроде следующего:
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(); });
});
В ответ на ваш дополнительный вопрос: Как добавить эту проверку подтверждения сотрудника в отдельный файл и вызвать ее из другого файла?
Подход следующий:
- Добавьте этот код проверки кода подтверждения сотрудника в другой файл.
- Экспортируйте эту недавно добавленную функциональность с
module.exports
.
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();
});
});