Как добавить глобальные переменные, используемые всеми тестами в Javascript?

Я не мог найти, как удалить дублирование кода в Javascript (в основном то, чего я достиг бы в Java с помощью базовых классов).

Конкретным примером является (по крайней мере) следующий код, который является общим для всех файлов спецификаций (и, возможно, объектов страницы, поскольку я тестирую этот шаблон в транспортире):

var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
var expect = chai.expect;

Могу ли я что-нибудь сделать, чтобы expect был доступен везде? Я попытался в конфигурации транспортира загрузить файл с этим перед спецификациями:

specs: [
  'e2e/helpers/commonDefinitions.js',
  'e2e/**/*.spec.js'
]

или используйте beforeLaunch или onPrepare (но нужна функция, не знаю, как выставить vars таким образом), но безуспешно.

Однако я бы предпочел общий подход Javascript такому повторному использованию кода.

Есть ли хороший способ избежать повторения такого общего кода везде, особенно в тестах (мокко, карма, транспортир)?


person cowst    schedule 11.02.2015    source источник


Ответы (1)


Один из подходов — поместить этот код в отдельный файл:

assert-styles.js

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
var should = chai.should;

module.exports = {
  expect: expect,
  should: should
};

а затем импортируйте его в другие ваши тестовые файлы:

test1.js

var assertStyles = require('./assert-styles');
var expect = assertStyles.expect;
var should = assertStyles.should;
person Miguel Mota    schedule 11.02.2015
comment
Спасибо, это хорошо, если в конце концов мне нужно будет только ожидать, как здесь. Но будет ли способ экспортировать несколько vars, создавая действительно файл, раскрывающий множество модулей, необходимых другим? Потому что, если я сделаю запрос для каждого файла/модуля, я получу очень мало повторного использования :) - person cowst; 11.02.2015
comment
@cowst определенно, просто экспортируйте и объект module.exports = {expect: expect, assert: assert};, а затем требуйте вот так, var common = require('./common'); var expect common.expect; var assert = common.assert; - person Miguel Mota; 11.02.2015
comment
Хорошо, таким образом удобно хранить все вспомогательные библиотеки в одном месте, и в случаях, подобных приведенному выше, когда мы используем 4 строки, чтобы добраться до 1 нужной нам переменной. Если бы мы просто объявляли сразу по 1 нужному var на строку, мы бы переписывали каждую строку в файлах с их помощью, поэтому вместо сохранения кода мы бы везде писали по одной дополнительной строке (требование) :D Я надеялся на что-то более удобное, вводили одну файл (написанный правильно) уже обеспечит вам видимость переменных. В любом случае, пожалуйста, отредактируйте свой ответ, чтобы я мог пометить его как лучший, который мы можем сделать для моих нужд :) - person cowst; 12.02.2015
comment
пожалуйста, отредактируйте свой ответ, чтобы я мог пометить его как лучшее, что мы можем сделать для моих нужд :) - person cowst; 16.02.2015
comment
@cowst Я не думаю, что есть хороший способ обойти это. Вы можете использовать объект GLOBAL, но это считается плохой практикой. stackoverflow.com/questions/5447771/node-js-global-variables< /а> - person Miguel Mota; 16.02.2015