如何在nodejs中重用带有异步调用的测试函数?

时间:2014-12-26 04:35:00

标签: javascript node.js asynchronous mocha should.js

我是node.js的新手,因为我使用过异步框架已经有一段时间了。 在诸如python之类的过程语言中,很容易得到输入和预期输出的列表然后循环它们来测试:

tests = {
  1: [2, 3],
  2: [3, 4],
  7: [8, 9],
}

for input, expected_out in tests.items():
  out = myfunc(input)
  assert(out == expected_out)

我试图用nodejs / mocha /应该做类似的事情:

var should = require('should');

function myfunc(x, cb) { var y = x + 1; var z = x + 2; cb([y, z]); };

describe('.mymethod()', function() {
    this.timeout(10000);
    it('should return the correct output given input', function(done) {
        var testCases = {
                1: [2, 3],
                2: [3, 4],
                7: [8, 9],
            };

        for (input in testCases) {
            myfunc(input, function (out) {
                var ev = testCases[input];
                out.should.equal(ev);
            });
        }
    })
})

这导致:

  AssertionError: expected [ '11', '12' ] to be [ 2, 3 ]
  + expected - actual

   [
  +  2
  +  3
  -  "11"
  -  "12"
   ]

我不知道[' 11',' 12'来自,但它有线程安全问题。

任何人都可以向我解释这些意想不到的价值来自何处?

1 个答案:

答案 0 :(得分:3)

您传递给input的{​​{1}}似乎被视为myfunc。看看这个答案。

Keys in Javascript objects can only be strings?

试试这个,

String

在这里,我已将var should = require('should'); function myfunc(x, cb) { var y = x + 1; var z = x + 2; cb([y, z]); }; describe('.mymethod()', function() { this.timeout(10000); it('should return the correct output given input', function(done) { var testCases = { 1: [2, 3], 2: [3, 4], 7: [8, 9], }; for (input in testCases) { input = parseInt(input) myfunc(input, function (out) { var ev = testCases[input]; out.should.equal(ev); }); } }) }) 解析为其整数值。