使用Mock-Knex模拟书架和Knex进行Mocha测试

时间:2018-06-28 08:57:53

标签: unit-testing mocking mocha knex.js bookshelf.js

我正在使用书架,并尝试为使用Mock-Knex设置端点的函数模拟两种不同的情况。

在两种情况下,传递给函数的数据都相同;唯一的不同是,在第二种情况下,返回的对象中的一个具有不同的属性值,该属性告诉我们已经注册了多少个端点,这将触发一个错误,告诉我们已达到限制。

我创建了模拟返回函数数组,并将它们传递给测试。不幸的是,它们都触发极限误差。感觉我不明白Mock-Knex加载数组的方式。

这是我的返回函数数组:

const successfulSetupTokenFetch = () => {
    query.response([{
        'endpoint_limit': 20,
        'endpoints_registered': 1
    }]);
};

const maxEndpointsSetupTokenFetch = () => {
    query.response([{attributes:{
            'endpoint_limit': 20,
            'endpoints_registered': 21
        }
    }]);
};

const successfulNewSetupQueries = [
    successfulSetupTokenFetch,
    ...
];

const endpointLimitSetupQueries = [
    maxEndpointsSetupTokenFetch,
    ...
];

这是我的测试:

describe('Endpoint setup function', function () {
    mockDb.mock(db);
    it('should create and return a new access token when given proper inputs', async function () {
        tracker.install();
        tracker.on('query', function sendResult (query, step) {
            successfulNewSetupQueries[step - 1]();
        });
        const setupReturn = await setupEndpoint(goodSetupObject);
        assert.equal(typeof setupReturn.token, 'string');
        tracker.uninstall()
    });
    it('should return an endpoint limit error when the limit is reached', async function () {
        tracker.install();
        tracker.on('query', function sendResult (query, step) {
            endpointLimitSetupQueries[step - 1]();
        });
        const endpointReturn = await setupEndpoint(goodSetupObject);
        assert.equal(endpointReturn.error, 'Your organization has reached its endpoint limit. P');
        tracker.uninstall();
    });
    mockDb.unmock(db);
});

请帮助我了解我在做错什么。

0 个答案:

没有答案