ter*_*way 5 javascript unit-testing mocking spy jestjs
我正在努力使用间谍On作为测试我的utils.js模块的一部分。我尝试了各种方法和途径,但似乎都产生了“预期的模拟函数被调用”。根据记录,其他单元测试工作正常,因此我的实际测试设置不应该有任何问题。
下面是一个简化的测试用例,包含两个函数和一个测试,我什至无法让它们工作。我是否完全误解了间谍?
// utils.js
function capitalHelper(string){
return string.toUpperCase();
}
function getCapitalName(inputString){
return capitalHelper(inputString.charAt(0)) + inputString.slice(1);
}
exports.capitalHelper = capitalHelper
exports.getCapitalName = getCapitalName
// utils.test.js
const Utils = require('./utils');
test('helper function was called', () => {
const capitalHelperSpy = jest.spyOn(Utils, 'capitalHelper');
const newString = Utils.getCapitalName('john');
expect(Utils.capitalHelper).toHaveBeenCalled();
})Run Code Online (Sandbox Code Playgroud)
我不使用spyOn(),而是使用jest.fn()来代替所有模拟场景
对于你的情况我会执行以下操作
test('helper function was called', () => {
Utils.capitalHelper = jest.fn((s) => Utils.capitalHelper(s))
const newString = Utils.getCapitalName('john')
expect(Utils.capitalHelper.mock.calls.length).toBe(1)
})
Run Code Online (Sandbox Code Playgroud)
第一行可以简单地是:
Utils.capitalHelper = jest.fn()
Run Code Online (Sandbox Code Playgroud)
因为您似乎没有在测试中测试返回值:)
您可以在 jest 官方文档上找到有关 jest.fn() 的更多详细信息:https://facebook.github.io/jest/docs/en/mock-functions.html
- - - - - - - - - - - - 编辑
我明白了:出现问题是因为在您的 utils.js 文件中, getCapitalName 使用定义的函数,而不是导出指向的函数。
为了能够模拟正在使用的函数,您可以将 utils.js 文件更改为
// utils.js
const Utils = {
capitalHelper: string => string.toUpperCase(),
getCapitalName: inputString => Utils.capitalHelper(inputString.charAt(0)) + inputString.slice(1)
}
export default Utils
Run Code Online (Sandbox Code Playgroud)
那么我之前给出的测试就会起作用
| 归档时间: |
|
| 查看次数: |
18279 次 |
| 最近记录: |