【发布时间】:2014-12-27 15:31:05
【问题描述】:
我目前正在为我的 Sails 应用程序设置测试基础架构,并且在我尝试使用 supertest 测试 API 请求之前一切顺利。
我正在尝试测试我的一些控制器方法(我实现了这些方法,而不是使用默认蓝图路由),但似乎 API 请求甚至没有通过。我认为这是因为我可以运行 npm test 并且此代码将运行良好,但是如果我将 POST 路径更改为 /datamodel/create5,其中 create5() 不作为控制器方法存在,它仍然运行良好.. . 在这两种情况下,都不会创建 DataModel 模型。我在下面包含了一些代码。
这是我的代码的样子:
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-memory 进行测试。
【问题讨论】:
标签: node.js unit-testing express sails.js supertest