Я думаю, является ли это TDD или нет, не существенная деталь. Я также немного озадачен вашим подходом.
Решение зависит также от вашей среды тестирования. Самым популярным для React является Jest, поэтому я могу найти решение, которое работает с этим довольно хорошо.
Если бы я был на вашем месте, я бы разделил асинхронную функцию на отдельный файл, что облегчает насмешки.
import axios from 'axios';
const getPosts = async () => axios.get('/api/posts/');
export default getPosts;
Предположим, у вас есть компонент PostList в обычной папке src вместе с файлом index.js .
.
├── src
│ ├── index.js
│ ├── PostList
│ ├── __mocks__
│ ├── GetPosts.js
│ ├── PostList.js
│ ├── PostList.test.js
│ ├── GetPosts.js
Папка __ mocks __ распознается Jest и работает должным образом, при условии соблюдения соглашения об именовании файлов:
Также обратите внимание на использование jest.mock('...')
в тестовом файле.
Исходя из вашего ложного примера, вы можете определить нечто похожее на это в __ mocks __ / GetPosts.js .
const returnedData = [{
id: 1,
title: "Hello",
description: "World"
}];
const getPosts = jest.fn().mockReturnValueOnce(() => returnedData);
export default getPosts;
// PostList.js
...
async componentDidMount() {
const posts = await GetPosts();
this.setState({
posts,
});
}
...
И ваш тестовый файл должен выглядеть примерно так:
import React from 'react';
import { shallow } from 'enzyme';
import PostList from './PostList.js';
jest.mock('./GetPosts.js'); // Here you "tell" to Jest to mock the function.
describe('<PostList />', () => {
let wrapper;
beforeAll(async () => {
wrapper = await shallow(<PostList />);
});
describe('componentDidMount', () => {
it('renders an li tag', () => {
expect(wrapper.find('li')).toHaveLength(1);
});
});
});
Первое, что пришло на ум:
Directory.GetFullPath().Split("\\").Length;
Я всегда - поклонник рекурсивные решения. Неэффективный, но забавный!
public static int FolderDepth(string path)
{
if (string.IsNullOrEmpty(path))
return 0;
DirectoryInfo parent = Directory.GetParent(path);
if (parent == null)
return 1;
return FolderDepth(parent.FullName) + 1;
}
Я люблю код Lisp, написанный в C#!
Вот другая рекурсивная версия, которую я люблю еще лучше, и вероятно более эффективно:
public static int FolderDepth(string path)
{
if (string.IsNullOrEmpty(path))
return 0;
return FolderDepth(new DirectoryInfo(path));
}
public static int FolderDepth(DirectoryInfo directory)
{
if (directory == null)
return 0;
return FolderDepth(directory.Parent) + 1;
}
Хорошие времена, хорошие времена...
Принятие Вашего пути уже исследовалось для того, чтобы быть допустимым, в.NET 3.5 Вы могли также использовать LINQ, чтобы сделать это в 1 строке кода...
Консоль. WriteLine ("C:\Folder1\Folder2\Folder3\Folder4\MyFile.txt".Where (c => c = "\").Count);
Если Вы используете членов Path
класс, можно справиться с локализациями разделительного символа пути и других связанных с путем протестов. Следующий код обеспечивает глубину (включая корень). Это не устойчиво к плохим строкам и такому, но это - запуск для Вас.
int depth = 0;
do
{
path = Path.GetDirectoryName(path);
Console.WriteLine(path);
++depth;
} while (!string.IsNullOrEmpty(path));
Console.WriteLine("Depth = " + depth.ToString());