javascript - 如何在所需功能上使用 Jasmine.js 间谍
问题描述
我有这个代码(Node.js):
文件:utils.js
// utils.js
const foo = () => {
// ....
}
const bar = () => {
// ....
}
module.exports = { foo, bar }
文件:myModule.js
// myModule.js
const {
foo,
bar
} = require('./utils');
const bizz = () => {
let fooResult = foo()
return bar(fooResult)
}
module.exports = { bizz }
文件:myModule.spec.js
// myModule.spec.js
const { bizz } = require('./myModule');
describe('myModule', () => {
it('bizz should return bla bla bla', () => {
let foo = jasmine.createSpy('foo').and.returnValue(true)
let bar = jasmine.createSpy('bar').and.callFake((data) => {
expect(date).toBeTrue();
return 'fake-data'
})
expect(bizz()).toBe('fake-data')
})
})
我正在尝试bizz
使用间谍foo
和bar
功能进行测试,但效果不佳。
任何人都可以向我解释如何在这些功能上创建间谍以测试 bizz 吗?
解决方案
对的,这是可能的。您只需要先要求utils
,spyOn
然后要求myModule
。下面的测试将通过。
const utils = require('./utils');
// myModule.spec.js
describe('myModule', () => {
it('bizz should return bla bla bla', () => {
const fooSpy = spyOn(utils, 'foo').and.returnValue(true);
const barSpy = spyOn(utils, 'bar').and.callFake(data => {
expect(data).toBeTrue();
return 'fake-data';
});
const { bizz } = require('./myModule'); // Import myModule after you added the spyOn
expect(bizz()).toBe('fake-data');
expect(fooSpy).toHaveBeenCalled();
expect(barSpy).toHaveBeenCalled();
});
});
希望能帮助到你
推荐阅读
- asp.net-mvc - 检测 QueryString 并在任何请求 URL 上创建会话
- python - Python If 语句:根据 Pandas 数据框列中的文本运行不同的公式
- r - 将日期列转换为从整数 Rstudio 开始的天数
- c# - 使用临时表作为目标的 SQLBulkCopy - 随机抛出“无法访问目标表”
- php - 如何在编辑刀片 Laravel 中获取选定的复选框值
- visual-studio-code - VSCode:keybindings.json 不断被覆盖
- spring - 使用 Spring WebClient 进行动态度量标记
- c++ - 在通用 lambda 中存储任意类型的编译时值
- laravel - 为什么 Api Route 在 laravel 应用程序中不起作用,显示错误(未找到 404 错误)?
- node.js - 在 webpack 中分离 dev 和 prod 输出文件?