Все зависит от ваших намерений с тестами. если вы хотите просто что-то простое, чтобы следить за тем, как выглядят ваши компоненты, и какую-то простую логику, тогда вы можете продолжить свой текущий способ обработки рендеринга и тестирования некоторой комбинации реквизита.
Другой способ - сделать все приложение, в котором вы можете тестировать, как в реальном браузере, и вы можете делать больше вещей, как это делают конечные пользователи. Эту я обычно предпочитаю, но для запуска требуется больше времени. Этому тоже понадобится JSDom. вы можете сослаться на https://airbnb.io/enzyme/docs/guides/jsdom.html , они очень хорошо документировали все различия между мелким, рендерингом и монтированием
Метод rest это монтировать, монтирование немного выше, чем мелкое и проще, чем рендеринг, и вы можете использовать его, когда хотите протестировать componentdidmount.
В Python 2.5, существует
A if C else B
как который ведет себя много?: в C. Однако это осуждено по двум причинам: удобочитаемость и то, что обычно существует более простой способ приблизиться к проблеме. Например, в Вашем случае:
stringValue = otherString or defaultString
@Dan
if otherString: stringValue = otherString else: stringValue = defaultString
Этот тип кода длиннее и более выразителен, но также и более читаем
Хорошо да, это длиннее. Не настолько уверенный в “более выразительном” и “более читаемый”. По крайней мере Ваше требование спорно. Я даже пошел бы до высказывания, что это совершенно неправильно по двум причинам.
Во-первых, Ваш код подчеркивает принятие решений (скорее чрезвычайно). С другой стороны, условный оператор подчеркивает что-то еще, а именно, значение (resp. присвоение упомянутого значения). И это точно, что хочет писатель этого кода. Принятие решений является действительно скорее побочным продуктом кода. Важная часть здесь является операцией присвоения. Ваш код скрывает это присвоение в большом количестве синтаксического шума: ветвление.
Ваш код менее выразителен, потому что он смещает акцент от важной части.
Даже затем Ваш код, вероятно, превзошел бы некоторое неясное ASCII-творчество как ?:
. Встроенное -if
было бы предпочтительно. Лично, мне не нравится вариант, начатый с Python 2.5, потому что это назад. Я предпочел бы что-то, что читает в том же потоке (направление) как тернарный оператор C, но использует слова вместо символов ASCII:
C = if cond then A else B
Это без труда побеждает.
C и C#, к сожалению, не имеют такого выразительного оператора. Но (и это - второй аргумент), троичный условный оператор языков C так долго устанавливается, что это стало идиомой сам по себе. Тернарный оператор является таким же количеством части языка как “стандартное” if
оператор. Поскольку это - идиома, кто-либо, кто знает, что язык сразу читает это право кода. Кроме того, это - чрезвычайно короткий, краткий способ выразить их семантика. На самом деле это - самый короткий вообразимый путь. Это чрезвычайно выразительно, потому что это не затеняет сущность с бесполезным шумом.
Наконец, Jeff Atwood записал идеальное заключение в это: лучший код не является никаким кодом вообще.
Между прочим, j0rd4n, Вы не делаете (не делайте!) пишут код как это в C#. Кроме того, что IsDefaultOrNull
на самом деле назван IsNullOrEmpty
, это - чистое чрезмерное увеличение размера кода. C# предлагает объединить оператор для ситуаций как они:
string stringValue = otherString ?? defaultString;
Это верно, что это только работает если otherString
null
(а не пустой), но если это может быть обеспечено заранее (и часто это может) это делает код намного более читаемым.
Можно использовать в своих интересах то, что логические выражения возвращают свое значение и не только истинное или ложное состояние. Например, можно всегда использовать:
result = question and firstanswer or secondanswer
С протестом, что это не работает как тернарный оператор, если firstanswer является ложью. Это вызвано тем, что вопрос оценен сначала, предположив, что это - истинный firstanswer, возвращается, если firstanswer не является ложью, таким образом, этому использованию не удается действовать как тернарный оператор. Если Вы знаете значения, однако, обычно нет никакой проблемы. Пример был бы:
result = choice == 7 and "Seven" or "Another Choice"
Это никогда не плохая вещь написать читаемый, выразительный код.
if otherString:
stringValue = otherString
else:
stringValue = defaultString
Этот тип кода длиннее и более выразителен, но также и более читаем и менее вероятен споткнуться или неправильным отредактированным в будущем. Не бойтесь записать выразительно - читаемый код должен быть целью, не побочным продуктом.
При использовании рубина Вы могли бы записать
stringValue = otherString.blank? ? defaultString : otherString;
встроенный blank?
метод означает пустой или пустой.
Приезжайте в темную сторону...
Я также обнаружил, что просто использование "или" оператор делает вполне прилично. Например:
finalString = get_override() or defaultString
Если get_override () возвратится "" или Ни один, то он будет всегда использовать defaultString.
Глава 4 diveintopython.net содержит ответ. В Python это называется трюк и / или.
Я предполагаю, что вы обычно делаете что-то подобное как часть заводской реализации, где фактическая типы не известны во время компиляции ...
Во-первых, обратите внимание, что более простым подходом может быть этап инициализации после создания, затем вы можете использовать обобщения:
static T Create<T>({args}) where T : class, ISomeInitInterface, new() {
T t = new T();
t.Init(args);
return t;
}
Затем вы можете использовать MakeGenericMethod
и / или CreateDelegate
.
В противном случае; вы можете сделать это «на лету» с помощью Expression
(3.