将 Wallaby 与 LoopbackJS 结合使用

Using Wallaby with LoopbackJS

我正在尝试将 Wallaby 与 LoopbackJS 一起使用,但最后几个小时只带来了失败。也许这里有人已经想出了如何去做。这是我最接近 "it's working"

的 wallaby 配置
 module.exports = function () {
      return {
        files: [
          'server/**/*.js',
          'common/**/*.js',
          'test/global.js'
        ],
        tests: [
          'test/models/*.js',
          'test/services/*.js'
        ],
        workers: {
          recycle: true //doesn't matter whats set here
        },
        bootstrap: function (wallaby) {
          // try number 1
          if (global.app) return;
          var path = require('path');
          var loopback = require('loopback');
          var boot = require('loopback-boot');

          wallaby.delayStart();
          global.app = loopback();
          // instead of __dirname I was trying also localProjectDir and projectCacheDir
          boot(global.app, path.join(__dirname, 'server'), function () {
            wallaby.start();
          });
          // try number 2
          var path = require('path');
          if (global.app) return;
          global.app = require(path.join(wallaby.localProjectDir, 'server/server.js'));
        },
        env: {
          type: 'node',
          params: {
            env: 'NODE_ENV=test'
          }
        }
      };
    };

尝试第 1 次启动,但应用程序似乎未配置。 app.get('some-config') 以及 app.models.myModel 始终未定义。 尝试 2 似乎好一点,因为它运行了一些测试,但它抛出了与第一个相同的错误。

将您的文件模式从 **/*.js 更改为 **/*.* 应该会有所帮助,因为还有 json 文件并且它们参与模型和配置初始化,因此 wallaby 也需要它们.您还需要使用 process.cwd()wallaby.projectCacheDir 而不是 wallaby.localProjectDir 以便 wallaby 可​​以为您完成代码覆盖。

module.exports = function () {
    return {
        files: [
          'server/**/*.*',
          'common/**/*.*',
          'test/global.js'
        ],
        tests: [
          'test/models/*.js',
          'test/services/*.js'
        ],

        bootstrap: function (wallaby) {
          if (global.app) return;
          var path = require('path');
          global.app = require(path.join(process.cwd(), 'server/server.js'));
        },

        env: {
          type: 'node',
          params: {
            env: 'NODE_ENV=test'
          }
        }
      };
};