這是一個很好的問題。當你使用webpack時,你的個人文件被包裝到不同的函數調用中。看看這doc。
這個問題最好的部分是它顯示了IOC/DI的必要性,如果你希望你的代碼是可測試的。您可以導出Analytics
類,而不是在本地模塊中定義remote
,然後將remote
注入到其構造函數中。
// Analytics.js
export default class Analytics{
constructor(remote) {
this.remote = remote
}
click(name) {
if (name) {
this.remote.next(name)
}
}
}
main.js
import Analytics from './Analytics'
const remote = new Subject()
const analytics = new Analytics(remote)
analysis.click('foo')
將依賴關係注入到所有組件/服務將是單調乏味的。關於爲什麼/如何簡化它,Angular有an decent doc。希望這有幫助!
//更新
您可以使用窗口使用window.remote
const remote = new Subject()
window.remote = remote
來定義測試全局常量和訪問它時,你想遠程嘲笑,記得要修改它的屬性,而不是對它的引用。
// test.js
beforeEach(() => {
// wrong !!!
window.remote = {
next(name) { assert(name) }
}
// right
window.remote.next = name => assert(name)
})
來源
2017-09-18 12:09:16
Zen
我猜你正在使用的WebPack,和'remote'不是一個全局變量 – Zen
嘿@Zen感謝您的回答。是的我使用webpack。 Jest告訴我,它不知道新Subject的「next」屬性(如果你對observables有一些瞭解,接下來是Subject類的經典方法)。任何關於如何讓Jest知道「遠程」變量的想法? – Megan