Javascript 与Chai、Mocha、Express、johnny five和node一起编写测试时出现新手错误

Javascript 与Chai、Mocha、Express、johnny five和node一起编写测试时出现新手错误,javascript,node.js,mocha.js,chai,Javascript,Node.js,Mocha.js,Chai,大家好,我正在尝试学习一些使用express、mocha、chai和johnny five的测试驱动开发。所以我写了这个小应用程序,可以打开和关闭LED。应用程序正常,但我的测试失败。有人能告诉我我在考试中做错了什么吗? 多谢各位 npm测试的输出为 > blink@1.0.0 test /Users/me/Documents/johnny-five/blink > mocha --reporter spec 1435257445439 Looking for connected d

大家好,我正在尝试学习一些使用express、mocha、chai和johnny five的测试驱动开发。所以我写了这个小应用程序,可以打开和关闭LED。应用程序正常,但我的测试失败。有人能告诉我我在考试中做错了什么吗?
多谢各位

npm测试的输出为

> blink@1.0.0 test /Users/me/Documents/johnny-five/blink
> mocha --reporter spec
1435257445439 Looking for connected device
  j5
    .on()
      1) Should turn a led on
    .off()
      ✓ Should turn a led off
  1 passing (13ms)
  1 failing
  1) j5 .on() Should turn a led on:
     AssertionError: expected undefined to equal 1
      at Context.<anonymous> (test/j5.js:9:14)
npm ERR! Test failed.  See above for more details.
这是server.js

var express = require("express");
var app = express();
var j5 = require("./j5");
var port = 3000;
app.get('/', function(req, res){
  res.send('hello j5');
});
app.get("/on", function(req, res) {
  j5.on();
  res.send("on");
});
app.get("/off", function(req, res) {
  j5.off();
  res.send("off");
});
console.log("listening on port http://localhost:" + port);
app.listen(3000);
这是j5.js

var exports = module.exports = {};
var five = require("johnny-five");
var board = new five.Board();
var board_ready = false;
var led = null;
board.on("ready", function() {
  board_ready = true;
  led = new five.Led(13);
});
exports.on = function() {
  if (led !== null && board_ready === true) {
    led.on();
    return 1;
  }
};
exports.off = function() {
  if (led !== null && board_ready === true) {
    led.off();
    return 0;
  }
};

编辑:在test/j5.js中指向我的j5.js的路径错误。但现在我有一个新的错误。AssertionError:上下文中未定义的值应等于1。(test/j5.js:9:14)。

玩了一番之后,我发现了我的错误。
johnny five需要一些时间通过串口连接到电路板。一旦内置REPL可用,我就可以使用函数
on()
off()
。因此,我让测试等待了5秒钟,然后调用
j5.on()
done()
函数的标准最大超时为2000ms。为了延长时间,我使用了
this.timeout(10000)

这是我的新测试/j5.js

require('mocha');
var assert = require('chai').assert;
var j5 = require("../j5");
var result = null;
describe('j5', function() {
  describe('.on()', function() {
    it('Should turn a led on', function(done) {
      this.timeout(10000);
      setTimeout(function() {
        result = j5.on();
        assert.equal(result, 1);
        done();
      }, 5000);
    });
  });
});
npm测试的结果

> blink@1.0.0 test /Users/icke/Documents/johnny-five/blink
> mocha --reporter spec
1435305595110 Device(s) /dev/cu.usbmodem1421
1435305595124 Connected /dev/cu.usbmodem1421
  j5
    .on()
1435305598694 Repl Initialized
      ✓ Should turn a led on (5003ms)
    .off()
      ✓ Should turn a led off


  2 passing (5s)

在您的
test/j5.js
中,
j5.js
是否在同一目录中?不,不是。m(但是现在我得到了一个新的错误。我会相应地更新。谢谢。现在我这里没有Arduino板可以工作。我明天会更新。
> blink@1.0.0 test /Users/icke/Documents/johnny-five/blink
> mocha --reporter spec
1435305595110 Device(s) /dev/cu.usbmodem1421
1435305595124 Connected /dev/cu.usbmodem1421
  j5
    .on()
1435305598694 Repl Initialized
      ✓ Should turn a led on (5003ms)
    .off()
      ✓ Should turn a led off


  2 passing (5s)