Sails.js和Mocha:使用supertest创build一个新的模型

我目前正在为我的Sails应用程序设置testing基础架构,并且一直在顺利进行,直到我尝试使用supertesttesting来testingAPI请求。

我试图testing一些我的控制器方法(我实现,而不是使用默认蓝图路线),但似乎API请求甚至没有经过。 我认为这是因为我可以运行npm test ,这段代码运行良好,但是如果我将POSTpath更改为/datamodel/create5 ,其中create5()不作为控制器方法存在,它仍然运行正常。在这两种情况下,都不会创buildDataModel模型。 我已经在下面包含了一些代码。

这是我的代码看起来像:

 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函数在实践中正确运行。 有什么build议,为什么我的testing不能正常工作? 如果有帮助,我正在使用sails-memory进行testing。

我想到了。 我需要首先validation我的代理人(通过拨打login路线),然后再进行任何通话。

主要有:

 var agent = request.agent(sails.hooks.http.app); agent.post('YOUR_LOGIN_ROUTE').end(done); // do your tests 

嗯,你不需要传递一些像suils应用程序那样的东西吗? 这里有个例子显示你需要做什么。 在第二个答案看前面的函数:

如何在Sails中使用摩卡testing控制器?