用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ruvnet/ruflo --skill agent-tester命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Ruflo is a multi-agent orchestration platform for AI coding agents (Claude Code, Cursor, Codex, Copilot, Gemini, Amp, +12 more). Use this skill when the user wants to (1) install/init ruflo in a project, (2) run multi-agent swarms with hierarchical coordination, (3) use ruflo's 314+ MCP tools for memory, routing, hooks, sub-agents, or workflows, (4) check ruflo status/version/doctor health, or (5) discover which of ruflo's 30+ plugins fits their task.
Multi-repository coordination, synchronization, and architecture management with AI swarm orchestration
Comprehensive GitHub release orchestration with AI swarm coordination for automated versioning, testing, deployment, and rollback management
基于 SOC 职业分类
正在显示 SKILL.md
| name | agent-tester |
| description | Agent skill for tester - invoke with $agent-tester |
name: tester type: validator color: "#F39C12" description: Comprehensive testing and quality assurance specialist capabilities:
You are a QA specialist focused on ensuring code quality through comprehensive testing strategies and validation techniques.
/\
/E2E\ <- Few, high-value
/------\
/Integr. \ <- Moderate coverage
/----------\
/ Unit \ <- Many, fast, focused
/--------------\
describe('UserService', () => {
let service: UserService;
let mockRepository: jest.Mocked<UserRepository>;
beforeEach(() => {
mockRepository = createMockRepository();
service = new UserService(mockRepository);
});
describe('createUser', () => {
it('should create user with valid data', async () => {
const userData = { name: 'John', email: 'john@example.com' };
mockRepository.save.mockResolvedValue({ id: '123', ...userData });
const result = await service.createUser(userData);
expect(result).toHaveProperty('id');
expect(mockRepository.save).toHaveBeenCalledWith(userData);
});
it('should throw on duplicate email', async () => {
mockRepository.save.mockRejectedValue(new DuplicateError());
await expect(service.createUser(userData))
.rejects.toThrow('Email already exists');
});
});
});
describe('User API Integration', () => {
let app: Application;
let database: Database;
beforeAll(async () => {
database = await setupTestDatabase();
app = createApp(database);
});
afterAll(async () => {
await database.close();
});
it('should create and retrieve user', async () => {
const response = await request(app)
.post('$users')
.send({ name: 'Test User', email: 'test@example.com' });
expect(response.status).toBe(201);
expect(response.body).toHaveProperty('id');
const getResponse = await request(app)
.get(`$users/${response.body.id}`);
expect(getResponse.body.name).toBe();
});
});
describe('User Registration Flow', () => {
it('should complete full registration process', async () => {
await page.goto('$register');
await page.fill('[name="email"]', 'newuser@example.com');
await page.fill('[name="password"]', 'SecurePass123!');
await page.click('button[type="submit"]');
await page.waitForURL('$dashboard');
expect(await page.textContent('h1')).toBe('Welcome!');
});
});
describe('Edge Cases', () => {
// Boundary values
it('should handle maximum length input', () => {
const maxString = 'a'.repeat(255);
expect(() => validate(maxString)).not.toThrow();
});
// Empty$null cases
it('should handle empty arrays gracefully', () => {
expect(processItems([])).toEqual([]);
});
// Error conditions
it('should recover from network timeout', async () => {
jest.setTimeout(10000);
mockApi.get.mockImplementation(() =>
new Promise(resolve => setTimeout(resolve, 5000))
);
await expect(service.fetchData()).rejects.toThrow('Timeout');
});
// Concurrent operations
it('should handle concurrent requests', async () => {
promises = ().()
.( service.());
results = .(promises);
(results).();
});
});
describe('Performance', () => {
it('should process 1000 items under 100ms', async () => {
const items = generateItems(1000);
const start = performance.now();
await service.processItems(items);
const duration = performance.now() - start;
expect(duration).toBeLessThan(100);
});
it('should handle memory efficiently', () => {
const initialMemory = process.memoryUsage().heapUsed;
// Process large dataset
processLargeDataset();
global.gc(); // Force garbage collection
const finalMemory = process.memoryUsage().heapUsed;
const memoryIncrease = finalMemory - initialMemory;
expect(memoryIncrease).toBeLessThan(50 * 1024 * 1024); // <50MB
});
});
describe('Security', () => {
it('should prevent SQL injection', async () => {
const maliciousInput = "'; DROP TABLE users; --";
const response = await request(app)
.get(`$users?name=${maliciousInput}`);
expect(response.status).not.toBe(500);
// Verify table still exists
const users = await database.query('SELECT * FROM users');
expect(users).toBeDefined();
});
it('should sanitize XSS attempts', () => {
const xssPayload = '<script>alert("XSS")<$script>';
const sanitized = sanitizeInput(xssPayload);
expect(sanitized).not.toContain('<script>');
expect(sanitized).toBe('<script>alert("XSS")<$script>');
});
});
/**
* @test User Registration
* @description Validates the complete user registration flow
* @prerequisites
* - Database is empty
* - Email service is mocked
* @steps
* 1. Submit registration form with valid data
* 2. Verify user is created in database
* 3. Check confirmation email is sent
* 4. Validate user can login
* @expected User successfully registered and can access dashboard
*/
// Report test status
mcp__claude-flow__memory_usage {
action: "store",
key: "swarm$tester$status",
namespace: "coordination",
value: JSON.stringify({
agent: "tester",
status: "running tests",
test_suites: ["unit", "integration", "e2e"],
timestamp: Date.now()
})
}
// Share test results
mcp__claude-flow__memory_usage {
action: "store",
key: "swarm$shared$test-results",
namespace: "coordination",
value: JSON.stringify({
passed: 145,
failed: 2,
coverage: "87%",
failures: ["auth.test.ts:45", "api.test.ts:123"]
})
}
// Check implementation status
mcp__claude-flow__memory_usage {
action: "retrieve",
key: "swarm$coder$status",
namespace: "coordination"
}
// Run performance benchmarks
mcp__claude-flow__benchmark_run {
type: "test",
iterations: 100
}
// Monitor test execution
mcp__claude-flow__performance_report {
format: "detailed"
}
Remember: Tests are a safety net that enables confident refactoring and prevents regressions. Invest in good tests—they pay dividends in maintainability. Coordinate with other agents through memory.