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

Как использовать тестовую среду mocha с node.js и sails.js

Я хочу использовать mocha для node.js. Последняя тестовая среда, которую я использовал, была Rspec из Ruby on Rails, поэтому я пытаюсь сделать это таким же образом, но я получаю cnfused структурой огромной и всеми библиотеками, которые я мог бы использовать.

Я слежу за официальным началом, но не объясняет, как организовать тесты.

http://visionmedia.github.io/mocha/#installation

Теперь я читаю, что могу использовать следующие библиотеки:

  • https://github.com/visionmedia/should.js - Что-то для проверки экземпляров модели.
  • https://github.com/LearnBoost/expect.js - Инструментарий минималистичного BDD-утверждения, основанный на should.js
  • http://chaijs.com/ - выглядит большим, включает в себя, должен ожидать и другую lib
  • https://github.com/visionmedia/better-assert - Улучшение утверждений c-стиля с использованием call-сайта для самодокументированных сообщений об отказах. (На самом деле я пока не понимаю цели, выглядит не лучше других).
  • https://github.com/rjanicek/mocha.js-haxe - Похоже, что используется браузер, но мокко также сказал, что он работает со стороны браузера.

И я знаю, что это больше, это список, который я видел на официальном сайте мокко. Для того, что я могу понять, похоже, что chai - это тот, который используется с моккой, что вы думаете об этом?

И до сих пор я никогда не видел ничего, чтобы помочь мне решить, где писать тесты (хорошо, в /test/, конечно) и как организовать все.

Я также использую отличную инфраструктуру sails.js(на основе express) и pomelo.js для разных проектов, мне нужно использовать те же самые тесты для обеих фреймворков, поэтому я ищу общую архитектуру и библиотеки, которые я могу использовать на обоих (так, что-то не специфичное для sails.js, но используемое непосредственно из любой другой структуры)

Вот как я планирую организовать свои тесты, считаете ли вы, что правильная архитектура? enter image description here

Основная проблема с node заключается в том, что существует множество фреймворков, плагинов, библиотек, и я не знаю, какой лучший выбор, node.js действительно огромный с большим сообществом, и действительно сложно обзор всех возможностей.

Как вы справляетесь со своими тестами?

4b9b3361

Ответ 1

Я нашел сообщение в блоге Unit Testing Sails.js Applications with Mocha полезен в отношении настройки и организации тестов.

Однако, поскольку я использую Sails версии 0.10.5, я решил немного очистить конфигурацию Grunt. Я добавил файл с именем mocha.js в папку tasks/config/ со следующим кодом:

module.exports = function(grunt) {

  grunt.config.set('mochaTest', {
      test: {
        options: {
          reporter: 'spec'
        },
        src: ['tests/**/*.spec.js']
      }
  });

  grunt.loadNpmTasks('grunt-mocha-test');

};

Затем я зарегистрировал задачу, создав файл с именем test.js внутри tasks/register. Внутри этого файла я добавил следующий код.

module.exports = function (grunt) {
    grunt.registerTask('test', [
            'mochaTest'
        ]
    );
};

Затем вы можете запустить grunt test, чтобы увидеть результаты.

Ответ 2

Создайте файл с именем test.js внутри тестовой папки

для тестирования утверждения лучший вариант - это что-то вроде chai или должен или ожидать, для тестирования rest api или отправки HTTP-запроса вы можете использовать supertest. Сначала включите всю библиотеку внутри тестового файла

"use strict"
var should = require('should');
var assert = require('assert');
var request = require('supertest');  

Теперь для тестирования бизнес-логики нужно указать нужный файл. Скажем, у меня есть файл с именем LoginService внутри api/services, который вы можете включить в него, следуя

var loginService = require('../api/services/LoginService');

Теперь вы можете начать тестирование своего тестового блока, будет выглядеть как-то похожее

describe('Sample Test', function(){
    var url = "http://localhost:1337/";
    before(function(done){
        //Anything that needed to be done before executing;
        done();
    });

     it("Should test rest api", function(done){
        var email = {'email':'[email protected]'};
             //Calling rest api with email as a part of req body
         request(url)
        .post('api/v1/email/isvalid')
        .send(email)
        // end handles the response
        .end(function(err, res) {
            if (err) {
                throw err;
            }
                    // Check response
            res.should.have.status(200) ;
            done();
        });
    });

    it("Should test business logic", function(done){
        loginService.someFunction(someParameter, function callback(data){
            //do your logic test here
            done();
        });
    });
});

Надеюсь, это поможет.