在同一文件中定义的 Sinon 存根辅助方法
Sinon stubbing helper method defined in same file
所以我有一个文件,user-database
,看起来像这样:
export function foo(id: number): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
findSomething(id)
.then((data) => {
//do something with data
})
}
}
export function findSomething(id: number): Promise<Object> {
return new Promise<Object> ((resolve, reject) => {
let query = 'SELECT * FROM user';
db.executeQuery(query);
.then(data) => {
if(data.length < 1) { reject(new Error('whoops')); }
resolve(data);
}, (err) => {
reject(err);
})
})
}
所以我正在使用 Sinon 为外部函数 foo
编写单元测试,因此我想存根它调用的函数 findSomething
。我这样做如下:
import * as user_db from '../../src/user-database';
describe('POST /someEndpoint', () => {
describe('when successful', () => {
let stub;
beforeEach(function() {
stub = sinon.stub(user_db, 'findSomething');
});
afterEach(function() {
stub.restore();
});
it('should respond with 200', function(done) {
stub.returns(anObjectIPredefine);
request(server)
.post(basePath)
.send(aPayloadIPredefine)
.expect(200, done);
});
}
}
当我 运行 测试时,我没有看到我用这个 stub.returns(anObjectIPredefine)
告诉存根 return 的对象。相反,我实际上让函数 findSomething
正常执行并从 dB 中获取数据。有什么明显的我做错了吗?我唯一的猜测是 stub = sinon.stub(user_db, 'findSomething')
不是对定义在与被测试函数相同范围内的函数进行存根的正确语法。不过,我找不到替代语法。
所以我最终做的是将我希望存根的函数移动到另一个文件。完成此操作后,存根将按预期工作。可能不是最好的解决方案,但对于处于类似情况的任何人来说绝对是一个快速的 band-aid。
所以我有一个文件,user-database
,看起来像这样:
export function foo(id: number): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
findSomething(id)
.then((data) => {
//do something with data
})
}
}
export function findSomething(id: number): Promise<Object> {
return new Promise<Object> ((resolve, reject) => {
let query = 'SELECT * FROM user';
db.executeQuery(query);
.then(data) => {
if(data.length < 1) { reject(new Error('whoops')); }
resolve(data);
}, (err) => {
reject(err);
})
})
}
所以我正在使用 Sinon 为外部函数 foo
编写单元测试,因此我想存根它调用的函数 findSomething
。我这样做如下:
import * as user_db from '../../src/user-database';
describe('POST /someEndpoint', () => {
describe('when successful', () => {
let stub;
beforeEach(function() {
stub = sinon.stub(user_db, 'findSomething');
});
afterEach(function() {
stub.restore();
});
it('should respond with 200', function(done) {
stub.returns(anObjectIPredefine);
request(server)
.post(basePath)
.send(aPayloadIPredefine)
.expect(200, done);
});
}
}
当我 运行 测试时,我没有看到我用这个 stub.returns(anObjectIPredefine)
告诉存根 return 的对象。相反,我实际上让函数 findSomething
正常执行并从 dB 中获取数据。有什么明显的我做错了吗?我唯一的猜测是 stub = sinon.stub(user_db, 'findSomething')
不是对定义在与被测试函数相同范围内的函数进行存根的正确语法。不过,我找不到替代语法。
所以我最终做的是将我希望存根的函数移动到另一个文件。完成此操作后,存根将按预期工作。可能不是最好的解决方案,但对于处于类似情况的任何人来说绝对是一个快速的 band-aid。