1

/config/passport.js В файле я определил и используют различные стратегии:Дразнящих различный passport.js стратегии в тесте интеграции

var 
    sails = require('sails'), 
    passport = require('passport'), 
    LocalStrategy = require('passport-local').Strategy, 
    CustomStrategy = require('passport-custom').Strategy, 
    GoogleStrategy = require('passport-google-oauth').OAuth2Strategy, 
    FacebookStrategy = require('passport-facebook').Strategy; 

passport.use(new LocalStrategy({...}, function(email, password, done){...})); 

passport.use('my-custom-strategy', new CustomStrategy(function (req, done){...})); 

... same for FB and Google 

И я хочу сделать интеграционный тест, где я издеваться результат возвращается в контроллер из этих стратегий (и сосредоточиться на остальной части контроллера и обработки услуг). В частности, насмехается custom-strategy.

Я мог бы найти некоторые редкие примеры, такие как this post и followup link, но не мог связать это с моими вариантами использования.

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

var expect = require('chai').expect 
    , request = require('supertest') 
    , sinon = require('sinon') 
    , passport = require('passport'); 

describe('/auth', function() { 
    it('should return correct authentication response with tokens', function (done) { 
     // here I want to mock the custom strategy (or any other) 

     var requestBody = { 
     // some info 
     }; 

     request(url) 
     .post('/auth') 
     .send(requestBody) 
     .end(function (err, res) { 
      if (err) { 
      return done(err); 
      } 

      console.log(res.body); 

      done(); 
     }); 
    }); 
    }); 

ответ

0

Мне от вашего вопроса не ясно, какие функции вы хотите высмеять.

Я бы интерпретировать две проблемные сценарии здесь:

Либо вы хотите, чтобы высмеивать саму аутентификацию, F.E. для проверки контроллеров API, основанных на аутентифицированном пользователе. Для этого сценария предоставленные ссылки являются одним из возможных способов. Просто напишите еще один механизм аутентификации, который подделывает зарегистрированного пользователя. Макетная стратегия не будет проходить через весь код, чем реальная стратегия, но только делает минимум, что нужно сделать. Может быть, манипулировать базой данных, если это необходимо. Здесь нечего добавить, если ваш вопрос не более конкретный.

Другой сценарий заключается в том, что вы хотите проверить стратегию самостоятельно. Поэтому вы хотите высмеять внешний ввод/вывод, на который опирается ваша стратегия. Это может быть пользовательский ввод/HTTP-трафик и/или взаимодействие с базой данных. Поскольку пользовательский ввод обычно собирается на сервере с использованием HTTP-трафика, и многие стратегии используют внешние серверы для аутентификации, я предлагаю высмеять фактический трафик HTTP так, как вам нужно, чтобы проверить вашу стратегию. Вы можете сделать это, используя nock. Для взаимодействия с базами данных вы могли бы f.e. настроить тестирование db.

Смежные вопросы