Ich versuche gerade, eine React-Komponente zu testen und habe etwas Verwirrung über die Funktionen der Hilfsfunktionen gespottet. Das Modul sieht so etwas wie dieseVerwechslung mit mysteriösen zustandslosen Komponenten-Hilfsfunktionen mit sinon-, enyzme- und ES6-Importen
export const someHelper =() => {
return (<div></div>)
}
const MyComponent =() => {
return (
<span>
{someHelper()}
</span>
)
}
export default MyComponent
und dann ist es das, was die Testdatei
import chai, { expect } from 'chai'
import chaiEnzyme from 'chai-enzyme'
import sinon from 'sinon'
import { shallow } from 'enzyme'
import React from 'react'
import MyComponent, { someHelper } from './MyComponent'
describe('MyComponent test', function(){
it.only('should call someHelper once', function() {
let spy = sinon.spy(someHelper)
let myComponent = shallow(
<MyComponent />
)
expect(spy.callCount).to.equal(1)
})
})
Dieser Test jedoch nicht als Callcount gleich 0 ist wie
sieht dachte ich, dass vielleicht hatte es etwas mit dem zu tun, Rahmen dersomeHelper
Funktion, so dass ich diese Änderungen
export const helpers = {
someHelper() {
...
}
}
const MyComponent =() => {
...
{helpers.someHelper()}
...
}
_
import MyComponent, { helpers } ...
describe(...{
it(...{
let spy = sinon.spy(helpers.someHelper)
...
})
})
Aber dieser Test nicht besteht nach wie vor mit 0 Callcount gleich habe ich dann diese Änderungen
describe(...{
it(...{
let spy = sinon.spy(helpers, 'someHelper')
...
})
})
Und dann Test jetzt passiert.
Warum muss ich someHelper
an das Objekt helpers
anfügen, damit dieser Test funktioniert? Und warum muss ich die letzte spy(object, 'myfunc')
Methode verwenden, wenn die sinon docs eine spy(myFunc)
Option anzeigen?
Große Antwort, danke! Würde es also wirklich keine Möglichkeit geben, eine Funktion zu stubben, die direkt und nicht durch ein Objekt (d. H. Helfer) aufgerufen wird? – Weston
@Weston nicht mit Sinon direkt, aber ['rewire'] (https://github.com/jhnns/rewire) und [' babel-plugin-rewire'] (https://github.com/speedskater/babel- plugin-rewire) kann dir vielleicht helfen (ersteres wahrscheinlich nicht so sehr, weil es bei Babel nicht funktioniert). – robertklep