ember-pouch验收测试策略:基于pouchDb实例的测试实现问询
我刚好之前处理过类似的Ember + ember-pouch测试场景,给你分享下具体的实现步骤,完全符合你说的每个测试周期创建/销毁独立PouchDB实例的需求:
实现方案:验收测试中使用独立PouchDB实例
1. 准备依赖
首先确保安装了内存版PouchDB适配器(避免持久化数据污染测试环境),执行命令:
npm install pouchdb-adapter-memory --save-dev
2. 在验收测试文件中配置钩子函数
在你的验收测试文件(比如tests/acceptance/your-test.js)中,通过beforeEach和afterEach钩子完成实例的创建与销毁,同时替换应用适配器的数据库引用:
import { module, test } from 'qunit'; import { visit, currentURL } from '@ember/test-helpers'; import { setupApplicationTest } from 'ember-qunit'; import PouchDB from 'pouchdb'; import { get, set } from '@ember/object'; // 加载内存适配器 PouchDB.plugin(require('pouchdb-adapter-memory')); module('Acceptance | 示例测试', function(hooks) { setupApplicationTest(hooks); let testPouchDb; let appAdapter; hooks.beforeEach(async function() { // 创建全新的内存PouchDB实例,每个测试都会生成独立的数据库 testPouchDb = new PouchDB(`test-db-${Date.now()}`, { adapter: 'memory' }); // 获取应用的主适配器(如果有多个适配器,需要逐个替换) appAdapter = this.owner.lookup('adapter:application'); // 将适配器的数据库实例替换为测试用实例 set(appAdapter, 'db', testPouchDb); }); hooks.afterEach(async function() { // 销毁测试用的PouchDB实例,清除所有数据 await testPouchDb.destroy(); // 重置适配器的数据库引用,避免影响后续测试 set(appAdapter, 'db', null); }); // 编写你的验收测试用例 test('从PouchDB读取数据并渲染页面', async function(assert) { // 先往测试数据库插入测试数据(注意type要和模型定义一致) await testPouchDb.put({ _id: 'post-1', title: '测试文章', type: 'post' }); await visit('/posts'); assert.equal(currentURL(), '/posts'); assert.dom('.post-title').hasText('测试文章'); }); });
关键细节说明
- 内存适配器的优势:使用内存数据库不会在本地生成持久化文件,测试结束后数据自动清空,完美隔离每个测试的状态。
- 动态数据库名:用
Date.now()生成唯一数据库名,避免极端情况下的实例冲突。 - 适配器替换逻辑:通过
this.owner.lookup获取应用的适配器实例,直接替换其db属性,确保测试时使用的是我们创建的测试数据库。
内容的提问来源于stack exchange,提问作者johnny_cp84
相关产品推荐
相关产品推荐

