正在回归"这个"在函数中推荐使用方法创建对象的模式?

时间:2018-04-06 14:28:29

标签: javascript

我发现自己有时在某些特定情况下需要这种模式,但在阅读代码时我并不经常看到它。我想知道这是否是推荐的模式,或者是否有更好/更常见的方法来完成同样的事情。也许更现代的方式在ES6中做同样的事情?

示例:

const state = {}
const stubs = {}
const query = () => {

    stubs.collection = sinon.stub().callsFake( (collection) => {
        state.collection = collection
        return this
    })
    stubs.orderBy = sinon.stub().callsFake( (orderBy, direction) => {
        state.orderBy = orderBy
        state.direction = direction
        return this
    })
    stubs.limit = sinon.stub().callsFake( (limit) => {
        state.limit = limit
        return this
    })
    stubs.get = sinon.stub().callsFake( () => {
        const query = state 
        state = {}
        const data = getQuery(query, mockDb)
        return data
    })

    this.collection = stubs.collection
    this.orderBy = stubs.orderBy
    this.limit = stubs.limit
    this.get = stubs.get
    return this
}
stubs.firestore = sinon.stub(firebase, 'firestore').get( () => query )

基本上我在这种情况下使用它的原因是我不得不查询"查询"火基单元测试方法。它必须在像firebase.firestore().collection('users').orderBy('timestamp').limit(10).get()这样的链中工作。我乱了五个小时,无法找到另一种有效的方法。

没有存根部分的例子是:

const query = () => {

    this.collection = () => {/*something...*/ return this}
    this.orderBy = () => {/*something...*/ return this}
    this.limit = () => {/*something...*/ return this}
    this.get = () => {/*something...*/ return this}
    return this
}

我不确定为什么我真的需要写这样的东西,如果我不需要短信,这只是一个例子,让我更清楚我在说什么关于没有存根的部分。

0 个答案:

没有答案