gpt4 book ai didi

vue.js - 如何使用柏树中的夹具模拟图像

转载 作者:行者123 更新时间:2023-12-01 04:30:46 25 4
gpt4 key购买 nike

我正在使用 cypress 来测试我的 VueJS 应用程序。我遇到的一件事是模拟要在页面上显示的图像。对于我的用例,我只是使用以下代码加载用户配置文件:

describe('Test Login', () => {
it('Can Login', () => {
cy.server();
cy.route({
method: 'GET',
url: '/api/account/',
response: 'fx:profile.json',
});
cy.route('**/media/demo1.png', 'fx:demo1.png');
});
});
fixtures/profile.json
{
"avatar": "http://localhost:8080/media/demo1.png",
"username": "cypress",
"email": "email@cypress.io",
"pk": 1,
"is_staff": true,
"is_superuser": true,
"is_active": true
}

配置文件夹具数据在测试中正确加载。在我的灯具文件夹中,我还有一个 demo1.png文件。我希望在测试期间加载并显示此图像,但它显示为损坏的图像。

在网络选项卡中,它显示 demo1.png作为带有 200 响应代码和类型 text/html 的损坏图像.

cypress 文档主要讨论上传图像的上下文中的图像,但我无法找到如何模拟通过 <img> 加载的图像的示例。标签。有没有更简单的方法来做到这一点?

最佳答案

我不确定这个答案是否可以帮助你。但至少它是解决这个问题的方法;-)

假设我们有一个这样的 HTML:

<html>
<body>
<button id="button">load</button>
<div id="profile">

</div>

<script>
function httpGetAsync(theUrl, callback)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(JSON.parse(xmlHttp.responseText));
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}

document.getElementById("button").addEventListener("click", () => {

httpGetAsync("/api/account/", (result) => {
var div = document.querySelector("#profile");
var img = document.createElement("img");
img.src = result.avatar;
div.appendChild(img)
})
})

</script>
</body>
</html>

来源: HTTP GET request in JavaScript?

并且您想在单击完成后加载配置文件。然后可以使用 MutationObserver 来替换 img.src。

首先,编写 MutationObserver:
var observeDOM = (function(){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

return function( obj, callback ){
if( !obj || !obj.nodeType === 1 ) return; // validation

if( MutationObserver ){
// define a new observer
var obs = new MutationObserver(function(mutations, observer){
callback(mutations);
})
// have the observer observe foo for changes in children
obs.observe( obj, { childList:true, subtree:true });
}

else if( window.addEventListener ){
obj.addEventListener('DOMNodeInserted', callback, false);
obj.addEventListener('DOMNodeRemoved', callback, false);
}
}
})();

(大量复制粘贴自 Detect changes in the DOM )

现在你可以这样做了:
describe('Test Login', () => {
it('Can Login', () => {
var win = null;
cy.server();
cy.route({
method: 'GET',
url: '/api/account/',
response: 'fx:profile.json'
});
cy.visit("index.html").then(w => {
cy.get("#profile").then(pro => {
var e = pro[0];
observeDOM(e, (m) => {
// add a red dot image
m[0].addedNodes[0].src = "data:image/png;base64,"+
"iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP"+
"C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA"+
"AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J"+
"REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq"+
"ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0"+
"vr4MkhoXe0rZigAAAABJRU5ErkJggg=="
})
})
cy.get("button").click()
})
});
});

(是的,至少有几行代码是我自己编写的;-P)

您可以从 fixtures 文件夹中的 img.src 属性中读取图像。为了简单起见,我在这里使用了静态 base64 字符串。

结果:
enter image description here

我们没有在我们的 aurelia 应用程序中使用这种东西,但我前段时间在一个私有(private)项目中尝试了类似的东西。

关于vue.js - 如何使用柏树中的夹具模拟图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54481634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com