Mocha测试套件给出了参考错误,并指出“未定义每个行为”
我正在尝试使用mocha在node.js中为待办事项应用程序运行测试脚本。但是有一个参考错误,它说“ beforeEach未定义”
const {app} = require('./../server');
const {Todo} = require('./../models/todo');
beforeEach((done) => {
Todo.remove({}).then(() => done());
});
describe('POST /todos', () => {
it('should create a new todo', (done) => {
var text = 'Test todo text';
request(app)
.post('/todos')
.send({text})
.expect(200)
.expect((res) => {
expect(res.body.text).toBe(text);
})
.end((err, res) => {
if (err) {
return done(err);
}
Todo.find().then((todos) => {
expect(todos.length).toBe(1);
expect(todos[0].text).toBe(text);
done();
}).catch((e) => done(e));
});
});
it('should not create todo with invalid body data', (done) => {
request(app)
.post('/todos')
.send({})
.expect(400)
.end((err, res) => {
if (err) {
return done(err);
}
Todo.find().then((todos) => {
expect(todos.length).toBe(0);
done();
}).catch((e) => done(e));
});
});
});
此外,我还为package.json文件提供了所有必需的软件包。
我的Package.json文件在下面给出
{
"name": "todo-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha server/**/*.test.js",
"test-watch": "nodemon --exec 'npm test' "
},
"author": "",
"license": "ISC",
"dependencies": {
"bluebird": "^3.5.3",
"body-parser": "^1.15.2",
"express": "^4.14.0",
"mongodb": "^2.2.5",
"mongoose": "^4.5.9"
},
"devDependencies": {
"expect": "^1.20.2",
"mocha": "^3.0.2",
"nodemon": "^1.10.2",
"supertest": "^2.0.0"
}
}
答案 0 :(得分:0)
我刚刚尝试使用您的package.json
文件通过简单的存储库来复制您的测试问题。我的测试文件
const expect = require('expect');
beforeEach((done) => {
done();
});
describe('just a test', function() {
it('test', function() {
expect(true).toBe(true);
})
});
然后,在运行npm t
时,测试已成功执行。
也许您的项目中配置错误。
答案 1 :(得分:0)
在我看来,您正在尝试在每次对Todo应用程序进行新测试之前清除MongoDB数据库中的数据。因此,您想找到todo
的集合并将所有内容放入下一个测试之前,如果是这样的话
beforeEach(() => {
mongoose.connection.collections.todo
});
使用上述方法,您可以直接引用数据库中的todo
集合,并在drop()
集合上调用todo
函数。
beforeEach(() => {
mongoose.connection.collections.todo.drop();
});
请告诉我我是否满足您的要求。请记住,这是一个异步操作,因此您需要确保暂停整个测试环境,直到操作完成为止,但是您已经知道这一点,因为您已经尝试实现done
回调。
此外,drop()
将接受如下回调函数:
beforeEach((done) => {
mongoose.connection.collections.todo.drop(() => {});
});
只有在完成收集后,该函数才会执行。因此,您还必须像这样定义后传递done()
回调:
beforeEach((done) => {
mongoose.connection.collections.todo.drop(() => {
done();
});
});
此外,当您运行Mocha测试时,您也会执行npm run test
。