由于投票结束,我想澄清一下我的要求。我想知道如何从具有Node.js后端的功能性本地Azure移动应用程序转变为可以使用Mocha和Chai成功测试的应用程序。下面列出的3个问题都是我看到的阻碍我以这种方式测试App Service的障碍。似乎需要额外的东西才能使Azure App Service与标准Node.js Web应用程序不同。我试图找出这些差异是什么以及如何解决它们或修复它们。
<小时/>
我一直在努力获取我的Azure移动应用程序的副本,其中Node.js后端在本地运行。
以下是我一直使用的一些资源:
我终于得到了这个工作,但我遇到了针对我的代码运行Mocha测试的问题。
当我运行时,一切都很好:
node app.js
我获得了所有预期的输出(特别是添加的API路径),我的浏览器可以浏览我的网站/ API。
然而,当我运行mocha
时(或npm test
如果我已将其添加到我的scripts
属性),似乎没有任何工作正常。我的初步测试 失败,但他们因为以下原因而失败:
为了好玩,我将test.js
文件更改为仅运行以下测试:
describe('Addition', function () {
it('should add two numbers correctly', function(done) {
(2 + 4).should.equal(6);
done();
});
});
它完全符合预期,因此问题似乎是在我的app.js
文件中加载我的自定义API,或者与Azure相关的其他非Node.js特定问题/错误。< / p>
<小时/>
我认为Azure移动应用程序是正常的,我的app.js
文件会加载我的所有API(.js
/ .json
文件对。以下是相关内容:
var mobile = azureMobileApps({
homePage: true
});
mobile.api.import('./api');
app.use(mobile);
当我在终端中运行mocha
命令时,我始终收到以下警告:
warn: Requested configuration path
(/{path to repo}/node_modules/mocha/bin/api)
does not exist
在我看来,这似乎是尝试使用'./api'
文件中的app.js
引用并将其应用于mocha
&#34;无论什么&#34; (脚本?可执行文件?),可在此处找到:/{path to repo}/node_modules/mocha/bin
。
现在,我非常确定我可以通过更改此行来修复此问题的创可贴:
mobile.api.import('./api');
到此:
mobile.api.import('../../../api');
因此,当我这样做时,我不再收到Requested configuration path does not exist
错误,但我也没有在控制台中获取打印输出,告诉我API方法已创建。尝试使用其他深度(例如,'../api'
或'../../api'
)会给出Requested configuration path does not exist
错误,因此我认为'../../../api'
路径是正确的路径,但它并没有。{现在看来执行该路径的任何内容(使用mocha
时)。
<小时/>
我也没有看到打印出verbose: SQL Azure database detected - setting connection encryption
行。这似乎告诉我,在调用azureMobile.js
时我的mocha
文件没有被加载,因为它似乎是在调用node app.js
时。
在调用node app.js
时调用mocha
时,Azure移动应用程序是否会出现不同的情况?如果是,那是什么,以及如何让mocha
真正像node
那样行事?
我有一个想法是我的app.js
文件在顶部有这些声明:
var express = require('express'),
azureMobileApps = require('azure-mobile-apps');
我明显使用azureMobileApps
来创建mobile
变量,这是API文件的.import()
。 mocha
如何加载app.js
进行测试还存在另一个问题吗? express
好像装好了,所以我怀疑这个问题,但我现在正在抓住任何吸管。
<小时/>
我正在努力确保我的&#34;网站&#34;在尝试运行测试之前有时间加载所有内容。为此,我尝试安装EventEmitter
,等待我的API在开始测试之前加载。
这假设我的mobile.api.import()
调用是异步的,这可能是一个错误的假设。此外,该呼叫可能会失败,不是由于时间原因,而是由于上面讨论的azureMobile.js
问题。
以下是相关代码:
app.js
:
app.listen(port, function () {
console.log('App has started');
app.emit('appStarted');
});
module.exports = app;
test.js
:
var app = require('../app');
before(function (done) {
app.on('appStarted', function(){
console.log('Got appStarted event');
done();
});
});
虽然我在控制台中看到'App has started'
消息,但永远不会调用app.on('Started'...
代码。
所以,简而言之,虽然我能够促进本地开发,但我还没有弄清楚如何使用Mocha来测试我的本地开发。上面显示的问题的任何指针或修复都非常感谢!