【问题标题】:Is DB a reserved word in Node.jsDB 是 Node.js 中的保留字吗
【发布时间】:2017-07-28 19:13:27
【问题描述】:

我正在用 mocha 和 chai(期望)构建一些测试。 在我学习测试方法的过程中保持简单。

我在配置文件中有一个 mysql 数据库层。 测试db参数,我遇到了一个奇怪的问题。

这些 db 参数测试正常:

host= 'localhost',
user='foo',
password='bar',

测试:

var expect = require('chai').expect;
var db = require('../db/config.ini');

describe('Database Access', function() {
    it('HOST parameter should be a string', function() {
        expect(host).to.be.a('string');
    });
    it('USER parameter should be a string', function() {
        expect(user).to.be.a('string');
    });
    it('PASSWORD parameter should be a string', function() {
        expect(password).to.be.a('string');
    });
    it('DB parameter should be a string', function() {
        expect(db).to.be.a('string');
    });
    it('HOST parameter should equal localhost', function() {
        expect(host).to.equal('localhost');
    });
    it('USER parameter should equal foo', function() {
        expect(user).to.equal('foo');
    });
    it('PASSWORD parameter should equal bar', function() {
        expect(password).to.equal('bar');
    });
    it('DB parameter should equal thatone', function() {
        expect(context).to.equal('thatone');
    });
});

当我添加要选择的数据库时,

db='thatone';

测试未通过参数,因为它将参数作为对象读取。

  1) Database Access DB parameter should be a string:
     AssertionError: expected {} to be a string
      at Context.<anonymous> (test/db_tests.js:21:20)

如果我将变量名称更改为“上下文”,则测试会按预期通过。

我想知道使用“db”作为变量是否有明显的遗漏。

更新 真是愚蠢,新手级别的错误。 如此专注于学习测试方法,我没有意识到我已经创建了 'db' var 作为 'ini' 的要求,然后在稍后引用它,就好像它是唯一的一样。

真的很笨。不顾一切地匆匆忙忙到达目的地,却没有遵循一些好的方法。

【问题讨论】:

  • require('../db/config.ini') 的结果是字符串吗? (提示:不是根据错误消息。)你不会想调用一些东西 else db 因为(a)最后一个赢了,(b)它真的非常非常令人困惑.正如这个问题所强调的那样。
  • 好的。好点子。也许“ini”文件不是这里最好的方法。我来自主要是 Unix 服务器背景。旧的技术理念仍在显现。
  • ini 文件是否不相关(不是我要采取的方向,因为您可以只使用一个对象),问题在于隐藏现有参考。
  • 嗯,是的,我没有忽略这一点。

标签: node.js mocha.js chai


【解决方案1】:

执行this的结果不是字符串:

var db = require('../db/config.ini');

您似乎正试图让某个 INI 方言中的文件由 Node.js 进行有意义的解释。 Node 默认不支持。 如果加载时没有出错,最可能的原因是您在其中的文本恰好也是有效的 JavaScript,但由于 INI 文件不包含导出某些内容的正确代码(即文件不包含 exports.db = "something"module.exports = { ... } 或类似内容),则模块具有值 {}

您需要添加多个 npm 包之一,该包将自动解释 INI 文件并提供有意义的值。我不能推荐一个,因为我不在我的软件中使用 INI 文件,但你可以search npm 为你执行翻译的包。

【讨论】:

  • 谢谢。这是对问题所在的有意义且有用的解释。我没有意识到我已经创建了“db”,然后在引用它时就好像它是新的一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2020-05-14
  • 2012-07-30
  • 1970-01-01
相关资源
最近更新 更多