Запуск кода только для тестов с использованием пакета Jasmine
Я использую sanjo:jasmine
а также velocity:html-reporter
пакеты в моем приложении, чтобы попробовать и реализовать некоторые юнит и интеграционное тестирование. Используя это руководство в качестве руководства, у меня есть несколько модульных тестов и пара интеграционных тестов. Я не могу понять, как заставить код работать в "тестовой" среде, которая не является частью модульного теста или интеграционного теста, но должна выполняться перед тестами и только для тестов.
Я пытаюсь решить, что мне нужны фиктивные пользователи, созданные для тестирования, но я не хочу, чтобы они были в моем рабочем приложении. Вроде как фаза "инициализации", когда вы можете создавать макеты и вставлять любые данные, которые вам нужны. Есть ли способ сделать это?
3 ответа
Я использую mike:mocha
и пока ваши спецификации пишутся в папке с именем tests (и затем клиент / сервер, соответственно), тогда Velocity помещает данные в коллекции, зависящие от скорости. Я использую тот же метод Meteor, который я использую для вставки документа в мое основное приложение, но скорость знает, чтобы поместить его в зеркальную версию.
Я бы порекомендовал вам создать некоторые исходные или фальшивые данные для ваших тестов на фабриках.
Я бы порекомендовал вам попробовать следующие пакеты:
- anti: fake - Поддельный генератор текста и данных для Meteor.js
- dburles: factory - пакет для создания тестовых данных или генерации приборов.
Вы можете установить эти пакеты с помощью этой команды:
meteor add anti:fake dburles:factory
Создайте заводские данные только для тестовой среды.
Я бы создал файл с именем server/seeds.js
со следующим содержанием:
Meteor.startup(function() {
Factory.define('user', Users, {
username: "test-user",
name: "Test user",
email: "test@example.com"
// add any other fields you need
});
var numberOfUsers = 10;
// Ensure this is the test environment
if (process.env.NODE_ENV === 'test') {
// Create the users from the factory definition
_(numberOfUsers).times(function(n) {
Factory.create('user');
});
}
});
Вы можете следовать этому подходу Factory для любых данных, а не только для пользователей.
Если ваши пользователи должны войти, например, когда вы используете accounts:base
Тогда я бы рассмотрел альтернативный подход к использованию заводских данных:
var email = "test@example.com";
var password = "secret";
var name = "Test user";
Accounts.createUser({email: email, password: password, profile: {name: name}});
Пожалуйста, смотрите Accounts.createUser в документации Meteor для более подробной информации.
Если вы используете sanjo:jasmine
Вы можете вставить данные в зеркальную БД, прежде чем писать свои спецификации (после describe
и раньше it
пункты), и эти данные будут доступны для всех спецификаций.
Также вы можете использовать beforeEach()
чтобы предоставить данные для каждой спецификации, а затем вы можете удалить ее, используя afterEach()
,
Здесь вы можете найти больше информации.