Node.js Sails.js和Mocha:使用supertest创建新模型
我目前正在为我的Sails应用程序设置测试基础设施,在我尝试使用Node.js Sails.js和Mocha:使用supertest创建新模型,node.js,unit-testing,express,sails.js,supertest,Node.js,Unit Testing,Express,Sails.js,Supertest,我目前正在为我的Sails应用程序设置测试基础设施,在我尝试使用supertest测试API请求之前,它一直进展顺利 我正在尝试测试我的一些控制器方法(我实现了这些方法,而不是使用默认的蓝图路由),但似乎API请求甚至没有通过。我认为这是因为我可以运行npm测试,并且这段代码可以正常运行,但是如果我将POST路径更改为/datamodel/create5,其中create5()不作为控制器方法存在,它仍然可以正常运行。。。在这两种情况下,都不会创建数据模型。我在下面包含了一些代码 这就是我的代码
supertest
测试API请求之前,它一直进展顺利
我正在尝试测试我的一些控制器方法(我实现了这些方法,而不是使用默认的蓝图路由),但似乎API请求甚至没有通过。我认为这是因为我可以运行npm测试
,并且这段代码可以正常运行,但是如果我将POST路径更改为/datamodel/create5
,其中create5()
不作为控制器方法存在,它仍然可以正常运行。。。在这两种情况下,都不会创建数据模型。我在下面包含了一些代码
这就是我的代码的样子:
var request = require('supertest');
var assert = require('assert');
var async = require('async');
var stubs = require('../stubs.js');
describe('DataModel', function() {
var testDataModel;
var dataModelParams = stubs.dataModelStub(); // simply returns a JSON dictionary
describe('#create()', function() {
describe('data model import', function() {
it('should import a new data model.', function (done) {
var agent = request.agent(sails.hooks.http.app);
agent
.post('/datamodel/create')
.send(dataModelParams)
.expect(302)
.end(function (err, res) {
if (err) {
throw new Error(err);
}
console.log(res.dataModel);
DataModel.find().exec(function (err, dataModels) {
console.log(dataModels); // should return an array of 1 model but returns empty array instead
done();
});
});
});
});
});
我的控制器代码片段:
create: function(req, res) {
DataModel.create(req.params.all(), function dataModelCreated(err, dataModel) {
if (err) {
sails.log.debug(err);
}
FlashService.success(req, 'Successfully imported a new data model.');
fs.ensureDirSync(path.join(sails.config.paths.DATASET_EXTRACT_PATH, dataModel.fileSafeName));
fs.ensureDirSync(path.join(sails.config.paths.DATASET_DOWNLOAD_ROOT, 'non_pii', dataModel.fileSafeName));
fs.ensureDirSync(path.join(sails.config.paths.DATASET_DOWNLOAD_ROOT, 'pii', dataModel.fileSafeName));
fs.ensureDirSync(path.join(sails.config.paths.DATASET_ENCRYPT_PATH, dataModel.fileSafeName));
return res.redirect('/admin/manage_data_models');
});
}
请注意,当我的应用程序启动时,
create
功能实际上运行正常。关于为什么我的测试不能正常工作,有什么建议吗?如果有帮助的话,我正在使用sails内存进行测试。嗯,你不需要通过类似sails应用程序的测试吗?这里有一个例子说明了您需要做什么。查看第二个答案中的before函数:
我想出来了。我需要先对我的代理进行身份验证(通过调用登录路径),然后才能通过这些调用
基本上:
var agent = request.agent(sails.hooks.http.app);
agent.post('YOUR_LOGIN_ROUTE').end(done);
// do your tests
是的,我试过http://localhost:1337
以及sails.hooks.http.app
,但两者都导致了相同的问题。它在测试片段的第13行。