2016-12-15 2 views
3

Так что у меня есть файл, user-database, который выглядит примерно так:Sinon гася вспомогательный метод определен в том же файле

export function foo(id: number): Promise<boolean> { 
    return new Promise<boolean>((resolve, reject) => { 
    findSomething(id) 
    .then((data) => { 
     //do something with data 
    }) 
    } 
} 

export function findSomething(id: number): Promise<Object> { 
    return new Promise<Object> ((resolve, reject) => { 
    let query = 'SELECT * FROM user'; 
    db.executeQuery(query); 
    .then(data) => { 
     if(data.length < 1) { reject(new Error('whoops')); } 
     resolve(data); 
    }, (err) => { 
     reject(err); 
    }) 
    }) 
} 

Так что я пишу модульных тестов с использованием Sinon для внешней функции, foo, и поэтому я хотите заглушить вызываемую им функцию, findSomething. Я делаю это следующим образом:

import * as user_db from '../../src/user-database'; 

describe('POST /someEndpoint',() => { 
    describe('when successful',() => { 
    let stub; 

    beforeEach(function() { 
     stub = sinon.stub(user_db, 'findSomething'); 
    }); 

    afterEach(function() { 
     stub.restore(); 
    }); 

    it('should respond with 200', function(done) { 
     stub.returns(anObjectIPredefine); 

     request(server) 
     .post(basePath) 
     .send(aPayloadIPredefine) 
     .expect(200, done); 
    }); 
    } 
} 

Когда я запускаю тест, я не вижу объект я говорю окурок, чтобы вернуться с этим stub.returns(anObjectIPredefine). Вместо этого у меня фактически есть функция findSomething выполнить как обычно и захватить данные с дБ. Есть ли что-то очевидное, что я делаю неправильно? Мое единственное предположение состоит в том, что stub = sinon.stub(user_db, 'findSomething') не является надлежащим синтаксисом для обнуления функции, определенной в той же области, что и проверяемая функция. Я не могу найти альтернативный синтаксис.

ответ

0

Итак, что я в конечном итоге сделал, это перемещение функций, которые я хотел записать в другой файл. Когда это будет сделано, ступенька будет работать по назначению. Наверное, это не самое лучшее решение, но, безусловно, быстрая ленточная помощь для всех в подобной ситуации.

0

Вы пытаетесь высмеять обещание, как будто это функция. stub.returns используется, чтобы высмеять возврат функции. В вашем случае вы хотите позвонить then пообещали

Посмотрите на что-то вроде sinon-as-promised.

+0

Я попробовал это после вашего предложения. Изменено все мои 'stub.return()' на 'stub.resolves()'. Также, конечно, библиотека включала библиотеку синонов. То же самое происходит, на самом деле не похоже на то, что оно должно быть укусом и вместо этого на самом деле вызывает реальный метод. – TovrikTheThird

Смежные вопросы