Итак, сегодня мне удалось зайти в блог чуть раньше, несмотря на отвлекающие факторы в Slack/Twitter/электронной почте, но я собираюсь придерживаться потока «добавления тестов», который я начал вчера, чтобы получить несколько спортивных повторений. в тестировании узла. Тем не менее, у нас есть довольно серьезная ошибка, когда наши электронные письма помечаются как спам, что может помешать мне тратить гораздо больше времени на код в этих сеансах. Могу ли я позволить себе проводить 15-минутные тесты узлов каждое утро в течение следующих двух недель? Так много регулярных мероприятий по обслуживанию станций, что дни переполнены!

Во всяком случае, по крайней мере со вчерашнего дня у нас есть несколько тестов в проекте greeter_bot. Давайте перейдем к совершенно другому проекту project_greeter_bot. С чего бы мне начать? Возьмите идентификатор задачи для создания тестов из самого проекта, это https://github.com/AgileVentures/project_greeter_bot/issues/5 — забавно, как это похоже на то, чтобы растопить лед на чем-то для того, чтобы протолкнуть небольшое чувство я не знаю, с чего начать. Поднимите терминал в нужном каталоге. Нет невыполненных запросов на включение в проект, вытащите последний код из мастера:

[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (master)]$ 
→ git pull origin master
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From https://github.com/AgileVentures/project_greeter_bot
 * branch            master     -> FETCH_HEAD
   bc396db..46944ce  master     -> origin/master
Updating bc396db..46944ce
Fast-forward
 server.js | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

создать ветку для новых тестов

→ git checkout -b 5_add_tests
Switched to a new branch '5_add_tests'
[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$

установить мокко

[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$ 
→ npm install mocha --save-dev
[email protected] /Users/tansaku/Documents/GitHub/AgileVentures/project_greeter_bot
└─┬ [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ ├── [email protected] 
  │ ├─┬ [email protected] 
  │ │ └── [email protected] 
  │ ├─┬ [email protected] 
  │ │ └─┬ [email protected] 
  │ │   ├── [email protected] 
  │ │   └── [email protected] 
  │ ├── [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ ├─┬ [email protected] 
  │ │ ├── [email protected] 
  │ │ └─┬ [email protected] 
  │ │   ├── [email protected] 
  │ │   ├── [email protected] 
  │ │   └── [email protected] 
  │ ├── [email protected] 
  │ └── [email protected] 
  └─┬ [email protected] 
    └── [email protected]

и chai, так как я плохо помню синтаксис assert:

[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$ 
→ npm install chai --save-dev
[email protected] /Users/tansaku/Documents/GitHub/AgileVentures/project_greeter_bot
└─┬ [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  └── [email protected]

Итак, я искал команду mocha init, эквивалентную rspec --init или bundle init, и она есть, но, похоже, она создает каркас на стороне клиента с html и т. д., так что это не то, что нам нужно здесь. Похоже, здесь есть место для небольшой автоматизации… Я открыл предложение функций с Mocha, а тем временем обновил проекты package.json с помощью:

"scripts": {
    "test": "mocha test/**/*.js"
  },

и сбросил следующее в test/greeter_spec.js

[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$ 
→ mkdir test
[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$ 
→ touch test/greeter_spec.js
require { expect } from 'chai';
describe('Project Greeter bot', function(){
  it('should have greetings', function(){
    expect(1).to.equal(1);
  });
});

и получил эту ошибку:

[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$ 
→ npm test
> [email protected] test /Users/tansaku/Documents/GitHub/AgileVentures/project_greeter_bot
> mocha test/**/*.js
/Users/tansaku/Documents/GitHub/AgileVentures/project_greeter_bot/test/greeter_spec.js:1
(function (exports, require, module, __filename, __dirname) { require { expect } from 'chai';
                                                                      ^
SyntaxError: Unexpected token {

Я не помню часть синтаксиса со вчерашнего дня. В этом суть репутации — найти болевые точки, которых вы не нашли бы, если бы просто скопировали и вставили код. Могу ли я теперь решить это, не прибегая к поиску решения… Так заманчиво просто посмотреть на правильный синтаксис, но я заставлю себя медленно прочитать сообщение об ошибке, SyntaxError: Unexpected token {, так что, может быть, просто попробуйте убрать фигурные скобки… нет, оба следующая ошибка:

require expect from 'chai';
require { 'expect' } from 'chai';

Ладно, посмотрю вчерашний код… ах, вот что должно быть:

var chai = require('chai');
var expect = chai.expect;

хм, я использовал смесь синтаксиса Python/React? :-) Хорошо, надеюсь, этот болевой момент поможет мне вспомнить — было бы здорово повторять каждый день, чтобы несколько человек закрепили его — теперь давайте посмотрим, смогу ли я снова подключить тест к реальному коду.

Немного потрудился — переместил весь js-код в директорию lib, переместил весь текст/переменные приветствия в файл greetings.js, переименовал тестовые файлы, сделал множество констант, обновил package.json с "start": "node lib/server.js" и попробовал следующее в конце файла greetings.js, чтобы его можно было вставить как в test, так и в server.js:

module.export = greetings;

что не получилось…

[tansaku@Samuels-MBP:~/Documents/Github/AgileVentures/project_greeter_bot (5_add_tests)]$ 
→ npm test
> [email protected] test /Users/tansaku/Documents/GitHub/AgileVentures/project_greeter_bot
> mocha test/**/*.js
module.js:471
    throw err;
    ^
Error: Cannot find module 'greetings'

так что я не помню — попробовать какие-то альтернативы?

default module greetings;
export.module = greetings;

ни один из них не работает — я думаю, что снова добавляю синтаксис React — каково решение? Ах, я был ближе к началу, экспорт должен быть во множественном числе:

module.exports = greetings;

но все еще не работает — ах путь, необходимый в тесте с:

const chai = require('chai');
const expect = chai.expect;
const greetings = require('../lib/greetings');
describe('Project Greeter bot', function(){
  it('should have greetings', function(){
    expect(greetings.greeter).to.include('something');
  });
});

Да это оно. Хорошо, нужно помнить о множественном числе в module.exports = ... и о том, что это отличается от export default <function> в React. Быстрое обновление тестов до чего-то более значимого, проверка того, что все в основном все еще работает, запуская сервер локально на старом экземпляре AV Mentors, и запрос на включение:

https://github.com/AgileVentures/project_greeter_bot/pull/23

и я начинаю думать обо всех остальных мелочах, чтобы превратить это в серьезный и доступный проект:

  1. использование режимов разработки/производства, чтобы избежать путаницы со слабыми идентификаторами
  2. последовательные инструкции по запуску проекта для новых разработчиков
  3. проверка этого развертывания в Azure
  4. настройка уведомлений GitHub на канале #bot-notify
  5. добавление проектов в начало работы AV и проекты …

Думаю, на другой день — обратно к точильному камню…

p.s. просто интересно, требует ли кодекс поведения, чтобы сопровождающие относились ко всем участникам с уважением, а участники относились друг к другу с уважением? вроде так и есть…

Первоначально опубликовано по адресу: http://nonprofits.agileventures.org/2017/09/06/av-ecosystem-review-athletic-reps/