По какой-то причине я не могу заглушить это здесь. Я сократил свой код почти до этого здесь. Это должно работать в соответствии с документами, но мне интересно, не упускаю ли я более мелкие детали машинописных/реагирующих хуков? Это совсем не похоже на дело, но кто знает. Заранее спасибо, если вы читаете это и не торопитесь. Я ценю то, что ты делаешь. Вот мой пример:
// connection.ts (the method to stub)
export const connectFn = async () => {
return 'i should not be here'
}
// ./reactHook.ts
import { connectFn } from './connection'
export const useMyHook = () => {
const handleConnect = async () => {
const result = await connectFn()
console.info(result)
// expected: 'i have been stubbed!'
// actual: 'i should not be here
}
return {
handleConnect
}
}
// ./App.ts
export const App = () => {
const { handleConnect } = useMyHook()
return <button onClick = {handleConnect}>Connect</button>
}
// ./cypress/integration/connection.spec.ts
import * as myConnectModule from '../../connection'
describe('stub test', () => {
it('stubs the connectFn', () => {
cy.stub(myConnectModule, 'connectFn').resolves('i have been stubbed!')
cy.get('[data-testid=connect-btn]').click()
// assertions about the view here...
})
})
Я думал, что довольно хорошо понял документы кипариса и Синон. Я читал, что кипарису нужен объект для заглушки, а не именованный экспорт напрямую - следовательно, * как импорт. Я также пробовал каждый способ экспортировать его. Я использовал их пример из документов напрямую, но безрезультатно. Затем я подумал, что это может быть проблема с машинописью, но, похоже, это не так. Я сократил свой фактический код почти до этого примера здесь. Я даже удалил все, кроме журналов для тестирования, и я все еще не получаю его.
Чтобы успешно заглушить, вам нужно заглушить (заменить) тот же экземпляр.
В reactHook.ts
import { connectFn } from './connection'
if (window.Cypress) {
window.connectFn = connectFn
}
В тесте
cy.window().then(win => {
cy.stub(win, 'connectFn').resolves('i have been stubbed!')
cy.get('[data-testid=connect-btn]').click()
...
}}
Кстати, useMyHook
подразумевает хук React, если это так, вам может понадобиться cy.wait(0)
, чтобы освободить основной поток JS и позволить хуку работать.