我正在编写uni-test和tring以尽可能地隔离我的代码。我正在使用Mocha和chai编写测试和ES5语法。 问题是,我找不到存根构造函数的任何解决方案。
.always-show .taginput-container {
align-items: center;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
height: auto;
cursor: text;
border-color: #dbdbdb;
color: #363636;
max-width: 100%;
width: 100%;
box-sizing: border-box;
clear: both;
font-size: 1rem;
position: relative;
text-align: left;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);
background-color: #fff;
box-shadow: inset 0 1px 2px hsla(0,0%,4%,.1);
padding: calc(.375em - 1px) calc(.625em - 1px);
line-height: 1.5;
}
在上面的示例中,我知道如何测试Promise,如何对内部函数进行存根,但是如何对Q.reject(new Error(obj.someFunction());
构造函数进行存根?以及如何检查Error
等
callWithExactly()
我正在使用正常功能。我没有在ChaiDocumentation
中找到任何相关示例答案 0 :(得分:0)
如果您真的想对Error
进行构造,则可以使用the Node.js global namespace:
code.js
exports.func = function() {
return new Error('error message');
}
code.test.js
const { func } = require('./code');
const sinon = require('sinon');
const assert = require('assert');
describe('func', function () {
it('should create an Error', function () {
const errorStub = sinon.stub(global, 'Error'); // <= stub the global Error
errorStub.callsFake(function(message) { // <= use callsFake to create a mock constructor
this.myMessage = 'stubbed: ' + message;
});
const result = func();
errorStub.restore(); // <= restore Error before doing anything else
assert(result.myMessage === 'stubbed: error message'); // Success!
sinon.assert.calledWithExactly(errorStub, 'error message'); // Success!
});
});
如果执行此操作,您将要在执行其他任何操作之前先恢复Error
……即使断言也可以使用Error
起作用,因此,原始的Error
必须就位断言失败。
仅监视Error
会更安全:
const { func } = require('./code');
const sinon = require('sinon');
describe('func', function () {
it('should create an Error', function () {
const errorSpy = sinon.spy(global, 'Error'); // <= spy on the global Error
func();
sinon.assert.calledWithExactly(errorSpy, 'error message'); // Success!
errorSpy.restore();
});
});
...最终,受测隔离代码的获取方式受到限制。对于像Error
这样低级的东西,您可能想要看看它是否完好无损,并使用Chai的.throw
断言来测试是否抛出了Error
。