很多道歉的标题,我仍然在想一个更好的解释方法。
我在Chai调用should.have.been时遇到问题。 ,属性总是返回undefined。奇怪的是我正在做一个console.log(should.have.been),它打印完整的对象,但由于某种原因我无法访问标志。
example.js in test
var var BaseController = function (model, routesFn) {
var router = require('express').Router();
routesFn(router);
return router;
};
test.js
var controller = require('../lib/controller.js')
,assert = require("assert")
,chai = require('chai')
,sinon = require('sinon')
,should = chai.should();
describe('baseController', function() {
it('should have something..', function() {
var routesFn = sinon.spy();
controller(null, routesFn);
routesFn.should.have.not.been.called; //notice the 'not'.
//Should fail here, but called is undefined
assert.equal(routesFn.called, true);
});
});
所以,我能够通过使用assert.equa()来验证回调'routesFn',但由于某种原因,被调用的属性显示为undefined。我最初尝试使用chai创建一个应该被称为语法的测试,后来意识到即使我没有实现逻辑,我的测试也会通过。
当我执行对象的console.log时,我看到了这个
console.log(routesFn.should.have.not.been);
{ __flags:
{ ssfi: [Function: shouldGetter],
object:
{ [Function: proxy]
reset: [Function],
invoke: [Function: invoke],
named: [Function: named],
...
called: true
}
}
当我从'被叫'中取出控制台时,它会打印未定义的。显然我无法访问嵌套属性。
console.log(routesFn.should.have.not.been.called); //expecting to print true
//prints
undefined
那么,我在初始设置中遗漏了什么吗?我想我需要在'should'变量初始化中添加其他内容,但在google上找不到任何内容。
答案 0 :(得分:1)
柴本身并不支持你想要做的事情。
我认为你所谓的example.js
应该是controller.js
,应该是这样的:
module.exports = function (model, routesFn) {
var router = require('express').Router();
routesFn(router);
return router;
};
否则,我无法看到您的代码如何工作。使用上面的模块,我需要更改为test.js
文件的唯一方法是在您已经拥有的必需来电之后以及调用chai.should()
后添加此内容:
var sinonChai = require('sinon-chai');
chai.use(sinonChai);
sinon-chai
增加了对should.have.not.been.called
的支持。有了这个,您的测试就会失败。