Подтвердить что ты не робот

BDD для интерфейса?

На стороне сервера у нас есть Rspec/Cucumber для разработки BDD (ruby) vowsjs (node.js)

Есть ли рамки BDD для использования в веб-браузерах (а не qUnit или YUI-тест, поскольку они предназначены только для TDD)?

4b9b3361

Ответ 2

Вы также можете посмотреть Yadda. Вместо того, чтобы быть автономной тестовой средой, такой как CucumberJS, она позволяет использовать синтаксис типа Gherkin из других фреймворков, таких как Mocha, Jasmine, CasperJS, Zombie, Qunit и т.д.

Ответ 3

Я бы второй Jasmine, а также взглянуть на Jasmine-species

Также обратите внимание: Kyuri - это парсер Gherkin (Cucumber DSL) для javascript, изначально он предназначался для Vows.js, но он также может генерировать простые старые javascript-заглушки (однако, он по-прежнему довольно глючит прямо сейчас).

Ответ 4

Здесь приведен список схем тестирования, перечисленных в wiki node.

cucumber-js выглядит многообещающим. Здесь образец синтаксиса:

Источник функций

Feature: Simple maths
  In order to do maths
  As a developer
  I want to increment variables

  Scenario: Increment variable once
    Given a variable set to 1
    When I increment the variable by 1
    Then the variable should contain 2

Определения шага

var variable;

Given(/^a variable set to (\d+)$/, function(number, callback) {
  variable = parseInt(number);
  callback();
});

When(/^I increment the variable by (\d+)$/, function(number, callback) {
  variable += parseInt(number);
  callback();
});

Then(/^the variable should contain (\d+)$/, function(number, callback) {
  if (variable != parseInt(number))
    throw(new Error('Variable should contain '+number+' but it contains '+variable+'.'));
  callback();
});

Ответ 5

Я думаю, что жасмин - это просто TDD-фреймворк, а не BDD, потому что у него нет двух уровней абстракции. Структуры BDD имеют:

  • Что нам делать? (обычно в txt файлах)
  • Как мы это делаем? (возможность повторного использования в javascript)

Но это хорошо, это хорошая отправная точка. Мне не нравится изобретать колесо (используя язык на основе txt). Я нашел структуру BDD, которая строится на жасмине, для меня это было идеальным решением: https://github.com/DealerDotCom/karma-jasmine-cucumber

Например:

specs.js(что мы делаем)

feature('Calculator: add')
    .scenario('should be able to add 2 numbers together')
        .when('I enter "1"')
        .and('I add "2"')
        .then('I should get "3"')
    .scenario('should be able to add to a result of a previous addition')
        .given('I added "1" and "2"')
        .when('I add "3"')
        .then('I should get "6"')

steps.js(как мы это делаем)

featureSteps('Calculator:')
    .before(function(){
        this.values = [];
        this.total = null;
    })
    .given('I added "(.*)" and "(.*)"', function(first, second){
        this.when('I enter "' + first + '"');
        this.when('I add "' + second + '"');
    })
    .when('I enter "(.*)"', function(val){
        this.values.push(val * 1);
    })
    .when('I add "(.*)"', function(val){
        this.values.push(val * 1);
        this.total = this.values[0] + this.values[1];
        this.values = [this.total];
    })
    .then('I should get "(.*)"', function(val){
        expect(this.total).toBe(val * 1);
    })

Обновление 2016-02-16:

После нескольких месяцев практики с BDD я закончил описания функций на основе txt и ofc. с огурцами. Я думаю, что лучше писать что-то действительно высокое значение абстракции в описаниях функций, а не то, что я ранее писал в моем примере с карма-жасмином-огурцом. По моему старому примеру я бы скорее написал что-то вроде этого в настоящее время:

  Scenario: Addition of numbers
    Given I have multiple numbers
    When I add these numbers together
    Then I should get their sum as result

Вот как мне это нравится в настоящее время. Я использую, чтобы определения шага устанавливали значения приборов и утверждений, но ofc. вы можете дать Examples gherkin, если хотите:

  Scenario: Addition of numbers
    Given I have <multiple numbers>
    When I add these numbers together
    Then I should get <their sum> as result

    Examples:
        | multiple numbers | their sum |
        |    1, 2, 3, 6    |     12    |
        |    8, 5          |     13    |
        |    5, -10, 32    |     27    |

Cucumber переводит эти 3 строки в 3 сценария, например:

    Given I have 1, 2, 3, 6
    When I add these numbers together
    Then I should get 12 as result

Может быть, это немного легче отлаживать, но вам нужно написать парсер для этих значений, например, разбить строку "1, 2, 3, 6" и parseInt значения, чтобы получить массив чисел. Я думаю, вы можете решить, какой путь лучше для вас.

Что действительно интересно с описанием функций уровня абстракции, что вы можете написать несколько разных определений шагов. Например, вы можете протестировать 2 разных apis, которые делают то же самое, или придерживаться примера калькулятора, вы можете написать тесты e2e для нескольких пользовательских интерфейсов (cli, webapplication и т.д.), Или вы можете написать простой тест, который тестирует только домен. В любом случае описания функций более или менее многоразовые.

Обновление 2016-04-15:

Я решил использовать Yadda с mocha вместо Cucumber с jasmine. Мне нравились огурцы и жасмин, но я думаю, что Yadda и мокка более гибкие.

Ответ 6

Теперь есть karma-cucumberjs, которые могут тестировать огурцы в реальных браузерах, а также PhantomJS.

https://github.com/s9tpepper/karma-cucumberjs