Это хорошая идея сохранить эти общие утверждения в отдельном файле, а не повторять его? Я написал так, так как это формат 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": "[email protected]"})
.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");
})
Может быть, вы можете просто включить эти общие утверждения, связанные с Сотрудниками, в функцию? Затем вызовите эту функцию EmployeeAssertion на каждой тестовой основе для каждого теста, который должен подтвердить ответ Employee для проверки общих атрибутов сотрудников. Я не знаю, что имеет смысл отделить эту проверку на подтверждение в другом файле, если в нескольких тестовых файлах не требуется функция проверки утверждения сотрудника. Главное помнить, что каждый из ваших индивидуальных тестов должен проверять одну вещь и должен быть изолирован друг от друга. Нет никакого вреда в создании общей функции утверждения для реализации (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": "[email protected]"})
.end(function(err, res) {
// unique attributes
expect(res).to.have.status(201);
// common employee attributes
assertEmployeeAttrs(res);
global.idVariable = res.body.id;
done(); });
});
В ответ на ваш дополнительный вопрос: как добавить эту проверку утверждения Employee в отдельный файл и вызвать его из другого файла?
Подход заключается в следующем:
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();
});
});