ฉันเริ่มคิดว่ามันเป็นไปไม่ได้ แต่ฉันต้องการถามต่อไป
ฉันต้องการทดสอบว่าหนึ่งในโมดูล ES6 ของฉันเรียกโมดูล ES6 อื่นด้วยวิธีเฉพาะ ด้วยจัสมินนี่เป็นเรื่องง่ายสุด ๆ -
รหัสแอพ:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
และรหัสทดสอบ:
//myModule-test.js
import myModule from '../myModule';
import dependency from '../dependency';
describe('myModule', () => {
it('calls the dependency with double the input', () => {
spyOn(dependency, 'doSomething');
myModule(2);
expect(dependency.doSomething).toHaveBeenCalledWith(4);
});
});
อะไรที่เทียบเท่ากับ Jest? ฉันรู้สึกว่านี่เป็นสิ่งง่าย ๆ ที่อยากทำ แต่ฉันก็พยายามจะคิดออก
สิ่งที่ใกล้เคียงที่สุดของฉันคือการแทนที่import
s ด้วยrequire
s และย้ายไปไว้ในการทดสอบ / ฟังก์ชั่น ไม่ใช่สิ่งที่ฉันต้องการจะทำ
// myModule.js
export default (x) => {
const dependency = require('./dependency'); // yuck
dependency.doSomething(x * 2);
}
//myModule-test.js
describe('myModule', () => {
it('calls the dependency with double the input', () => {
jest.mock('../dependency');
myModule(2);
const dependency = require('../dependency'); // also yuck
expect(dependency.doSomething).toBeCalledWith(4);
});
});
สำหรับคะแนนโบนัสฉันชอบที่จะทำให้ทุกอย่างทำงานเมื่อฟังก์ชั่นด้านในdependency.js
เป็นการส่งออกเริ่มต้น อย่างไรก็ตามฉันรู้ว่าการสอดแนมในการส่งออกเริ่มต้นไม่ได้ทำงานในจัสมิน (หรืออย่างน้อยฉันก็ไม่สามารถทำงานได้) ดังนั้นฉันจึงไม่ได้หวังว่ามันจะเป็นไปได้ในเจสต์เช่นกัน
import
s เป็น s ต่อไปrequire
ในตอนนี้ ขอบคุณสำหรับหัวขึ้นแม้ว่า