使用Azure移动应用程序的Mocha:入门

时间:2017-10-18 16:40:55

标签: node.js azure mocha

TL;博士;

由于投票结束,我想澄清一下我的要求。我想知道如何从具有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属性),似乎没有任何工作正常。我的初步测试 失败,但他们因为以下原因而失败:

  1. 超时问题,或
  2. API未创建错误(404错误)
  3. 为了好玩,我将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>

    <小时/>

    问题1:

    我认为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时)。

    <小时/>

    问题2:

    我也没有看到打印出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好像装好了,所以我怀疑这个问题,但我现在正在抓住任何吸管。

    <小时/>

    第3期

    我正在努力确保我的&#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来测试我的本地开发。上面显示的问题的任何指针或修复都非常感谢!

0 个答案:

没有答案