Проблема, с которой я сталкиваюсь, заключается в том, что каждый тест должен выполняться в любом порядке, однако я хочу иметь возможность тестировать разные результаты.
My DataStorageService - это служба для экстраполяции хранилища. используемый. Например, LocalStorage, No SQL, et c. все можно использовать, но мой основной код будет продолжать вызывать DAtaStorageService. Я просто изменяю реализацию, чтобы использовать любой модуль, который мне нужен, или их комбинацию.
Это пример блока из настройки теста.
const BadData:Observable<ITestInterface> = of<ITestInterface>( { Key_: 'Bad', Name: 'Bad Record for Testing' } );
const GoodData:Observable<ITestInterface> = of<ITestInterface>( { Key_: 'Good', Name: 'Good Record for Testing' } );
const NoKey:Observable<ITestInterface> = of<ITestInterface>( { Name: 'Missing Key for Testing' } );
describe('DataStorage Service - Mocked AngularFire Responses', () => {
let ServiceUnderTest:DataStorage<ITestInterface>;
let DependentService:AngularFireDatabase;
const ObjectStub = {
valueChanges: jasmine.createSpy('valueChanges').and.returnValue(GoodData)
};
const AfDbStub = {
object: jasmine.createSpy('object').and.returnValue(ObjectStub)
};
afterEach(() => {
DependentService = null;
ServiceUnderTest = null;
});
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
DataStorage,
{ provide: AngularFireDatabase, useValue:AfDbStub }
]
});
DependentService = TestBed.inject(AngularFireDatabase);
ServiceUnderTest = TestBed.inject(DataStorage);
});
Вопрос, который у меня возникает, заключается в том, как продолжайте настраивать заглушку, которая будет возвращена. Я пишу тесты для обработки успешных возвратов, отрицательных возвратов и т. Д. c. Однако, как я вижу при построении заглушек, возвращающих значение, все они кажутся однопроходными, если только вы не настроите первый возврат, второй возврат, а затем третий и т. Д. c.
В образец добавлен один сервис, но в нем есть только одна заглушка из сервиса AngularFire, с которой мой код может работать. Таким образом, мне нужно сделать этот полный блок для каждого из трех различных тестов. Есть ли способ сделать это без 3-х различных блоков описания? Я знаю, что мог бы установить это, чтобы получить 3 возврата для первого вызова, второго вызова и затем третьего вызова, и каждый тест совершает соответствующее количество вызовов, однако это не кажется правильным.
Однако, так как я хочу протестировать успех, неудачу, пропущенные данные, это единственное средство, которое возвращает данные в указанном порядке, означает, что мои тесты должны выполняться в таком порядке, что означает, что они не являются действительно независимыми. Правильно ли это, или я делаю что-то, например, просто возвращаю различные настройки, и проверка на отрицательный вызов сделает первый вызов, чтобы получить положительный результат, затем второй вызов в том же тесте, чтобы он возвратил ошибку и проверил, что результат?
РЕДАКТИРОВАТЬ: Я также считаю, что мои шпионы / заглушки не настроены правильно для работы с базовым Angularfire. У меня все еще вопрос о заменах, но, может быть, шпионы могли бы быть установлены с функциями в возврате, чтобы позволить мне проверить переменную и вернуть хорошее, плохое или ошибку?