几天来我一直在尝试使用测试数据设置Firebase Emulator。
func test_WhenPartyNameIsUnique_ThenErrorIsNil() {
// given
let exp = self.expectation(description: "Waiting for Firebase Emulator")
// when
self.sut.isUnique(partyName: "akshit") { (error) in
// then
XCTAssertNil(error)
exp.fulfill()
}
self.waitForExpectations(timeout: 1, handler: nil)
}
我无法弄清楚如何为每个测试设置不同的测试数据。对于上面的测试,我想检查partyName是否唯一(意味着数据库中已经存在)。我该怎么办?
答案 0 :(得分:2)
Firestore模拟器现在支持导入/导出。因此,创建一个测试用例:
import socketIOClient from 'socket.io-client';
import MockedSocket from 'socket.io-mock';
jest.mock('socket.io-client');
describe('Testing connection', () => {
let socket;
beforeEach(() => {
socket = new MockedSocket();
socketIOClient.mockReturnValue(socket);
});
afterEach(() => {
jest.restoreAllMocks();
});
it('should dispatch connect event', () => {
/*socket should connect in App and
Note that the url should be dummy string
for test environment e.g.(const socket = io('', options);)*/
const wrapper = (
<Provider store={store}>
<App />
</Provider>
);
expect(socketIOClient.connect).toHaveBeenCalled();
});
it('should emit message:new', done => {
const wrapper = (
<Provider store={store}>
<App />
</Provider>
);
...
socket.on('message:new', (data)=>{
expect(data).toEqual(['message1', 'message2']);
done();
});
socket.socketClient.emit('message:new', ['message1', 'message2']);
...
});
});
)firebase emulators:start
现在,您将在firebase emulators:export ./some-directory
中拥有Firestore模拟器数据的快照。您可以通过运行以下命令以这些数据启动仿真器:
./some-directory
目前,此功能仅支持Firestore,但我们希望将来可以使用相同的流程将导入/导出添加到更多仿真器中。
答案 1 :(得分:1)
现在将数据放入仿真器的常用方法是运行代码,以便在启动时从应用程序代码中注入数据。
正在研究一种在启动时将数据作为仿真器的命令行选项注入的方法,但是像往常一样:我们不能做出任何承诺,也不能给出时间表。在此之前,通常必须在测试设置中从代码中插入测试数据。