打字稿:如何从导入的命名空间存根函数
Typescript: how to stub function from imported namespace
我有以下文件
// definition file
export namespace Foo {
export function foo() {
bar();
}
export function bar() {
throw 'not implemented yet'
}
}
// test file
import { Foo } from 'fooFile'
describe('', () => {
it('', () => {
const sandbox = sinon.createSandbox();
sandbox.stub(Foo, 'bar');
Foo.foo(); // expected not to throw since I stubbed bar
});
});
而且我不知道为什么它仍然会抛出。到目前为止,我已经能够存根从没有命名空间的文件 (import * as Foo from
) 导入的函数、来自 class 的方法和静态方法,但我找不到这个存根的语法。
函数foo()
里面的变量bar
其实是指局部作用域变量bar
,但是是未定义的,然后使用全局变量,是定义的。 (Reference)
AFAIK,您不能从函数内部的变量创建存根。
如何确保在 Foo 命名空间内调用函数 bar()?使用 this.bar()
或 Foo.bar()
。那么现在,命名空间 Foo 中方法 bar 的存根可以在您的测试文件中工作(您已正确创建存根)。
例如文件foo.ts
export namespace Foo {
export function foo() {
this.bar(); // Or use: Foo.bar().
}
export function bar() {
throw 'not implemented yet'
}
}
测试文件:Whosebug.test.ts
import sinon from 'sinon';
import { expect } from 'chai';
import { Foo } from './foo';
describe('', function () {
it('', function () {
const stubFooBar = sinon.stub(Foo, 'bar');
Foo.foo();
expect(stubFooBar.calledOnce).to.equal(true);
stubFooBar.restore();
});
});
当我 运行 它使用 mocha 时。
$ npx ts-mocha Whosebug.test.ts --exit
✓
1 passing (6ms)
$
希望对您有所帮助。
我有以下文件
// definition file
export namespace Foo {
export function foo() {
bar();
}
export function bar() {
throw 'not implemented yet'
}
}
// test file
import { Foo } from 'fooFile'
describe('', () => {
it('', () => {
const sandbox = sinon.createSandbox();
sandbox.stub(Foo, 'bar');
Foo.foo(); // expected not to throw since I stubbed bar
});
});
而且我不知道为什么它仍然会抛出。到目前为止,我已经能够存根从没有命名空间的文件 (import * as Foo from
) 导入的函数、来自 class 的方法和静态方法,但我找不到这个存根的语法。
函数foo()
里面的变量bar
其实是指局部作用域变量bar
,但是是未定义的,然后使用全局变量,是定义的。 (Reference)
AFAIK,您不能从函数内部的变量创建存根。
如何确保在 Foo 命名空间内调用函数 bar()?使用 this.bar()
或 Foo.bar()
。那么现在,命名空间 Foo 中方法 bar 的存根可以在您的测试文件中工作(您已正确创建存根)。
例如文件foo.ts
export namespace Foo {
export function foo() {
this.bar(); // Or use: Foo.bar().
}
export function bar() {
throw 'not implemented yet'
}
}
测试文件:Whosebug.test.ts
import sinon from 'sinon';
import { expect } from 'chai';
import { Foo } from './foo';
describe('', function () {
it('', function () {
const stubFooBar = sinon.stub(Foo, 'bar');
Foo.foo();
expect(stubFooBar.calledOnce).to.equal(true);
stubFooBar.restore();
});
});
当我 运行 它使用 mocha 时。
$ npx ts-mocha Whosebug.test.ts --exit
✓
1 passing (6ms)
$
希望对您有所帮助。