[英]Front-end testing using React and Selenium-Webdriver with Rails as Backend
我只想測試前端部分。 所以,這是我的問題:
我有一個健壯的Ruby on Rails(V3.2)后端應用程序,以及一個帶有ReactJs(V16.4)的全新獨立的前端應用程序。
我們開始在Selenium-Webdriver和JestJs的幫助下測試React應用,我們設法嘗試了幾種視圖,但是當我們向rails API發出POST請求時出現了問題。
由於測試,我不想用垃圾填滿我的數據庫(開發)。
例如:當我想測試新用戶的創建時會發生什么?
我在想3種解決方案:
這取決於您要測試整個堆棧(前端/后端)還是僅測試前端部分。
如果只想測試前端部分,請使用第一個解決方案:模擬API調用。
如果您僅直接使用selenium-webdriver,將會受到限制。 我建議使用夜表或testcafe 。 Testcafe不依賴硒。 在最新版本的Nightwatch中,這也是可選的。
Testcafe包括一個請求模擬API: http ://devexpress.github.io/testcafe/documentation/test-api/intercepting-http-requests/mocking-http-responses.html
使用Nightwatch,您可以使用nock 。 查看Nightwatch Mock HTTP請求
如果要測試整個堆棧,則可以使用以下方法:實現自定義API端點,以允許在測試執行之前或之后將數據庫重置為干凈狀態。 (例如“ / myapi / clean”)
您應該在生產環境中禁用對此端點的訪問。
然后,您可以實現測試掛鈎(之前/之后),以調用您的自定義api端點:
您可以有一個測試環境。 根據我的經驗,測試生成的垃圾數據並不是什么大問題。 您可以定期清理它。 或者,您可以為每次測試運行創建一個新環境。
示例代碼:
import { mount } from "enzyme";
import sinon from "sinon";
beforeAll(() => {
server = sinon.fakeServer.create();
const initialState = {
example: ExampleData,
auth: AuthData
};
wrapper = mount(
<Root initialState={initialState}>
<ExampleContainer />
</Root>
);
});
it("example description", () => {
server.respondWith("POST", "/api/v1/example", [
200,
{ "Content-Type": "application/json" },
'message: "Example message OK"'
]);
server.respond();
expect(wrapper.find(".response").text().to.equal('Example message OK');
})
在上面的代碼中,我們可以看到如何使用由酶創建的測試DOM攔截API調用,然后使用sinon模擬API響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.