我有以下表单模板:
import request from "supertest";
import router from "./router";
const sendMailMock = jest.fn(); // this will return undefined if .sendMail() is called
// In order to return a specific value you can use this instead
// const sendMailMock = jest.fn().mockReturnValue(/* Whatever you would expect as return value */);
jest.mock("nodemailer");
const nodemailer = require("nodemailer"); //doesn't work with import. idk why
nodemailer.createTransport.mockReturnValue({"sendMail": sendMailMock});
beforeEach( () => {
sendMailMock.mockClear();
nodemailer.createTransport.mockClear();
});
describe("", () => {
...
test("", async () => {
// 1 - 200 status code; 2 - check email was sent
expect.assertions(2);
const response = await request(router)
.post("/login")
// global variable
.send({ "email": email })
.set("Accept", "application/json")
.expect("Content-Type", /json/);
// should complete successfully
expect(response.status).toBe(200);
// TODO not sure how to express the expect statement here
expect(sendMailMock).toHaveBeenCalled();
});
});
属于以下形式:
<form action="{% url 'reg:create_item' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="level">
<div class="level-left">
<div class="level-item">
<div class="field">
<label for={{form.name.id_for_label}} class="label has-text-weight-light">Name</label>
<div class="control">
{{form.name}}
</div>
</div>
</div>
</div>
<div class="level-right">
<div class="level-item">
<div class="field">
<label for="{{form.photo.id_for_label}}" class="label image is-96x96" style="cursor:pointer;">
<img id="dish_thumb" src="https://via.placeholder.com/96" alt="">
</label>
<div class="control">
{{form.photo}}
</div>
</div>
</div>
</div>
</div>
<div class="field">
<label for="{{form.price.id_for_label}}" class="label has-text-weight-light">Item value</label>
<div class="control">
{{form.price}}
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-medium is-danger">Cancel</button>
</div>
<div class="control">
<button type="submit" class="button is-medium is-link">Add</button>
</div>
</div>
</form>
和视图:
class ItemForm(ModelForm):
class Meta:
model = Item
fields = ['name','price','photo']
widgets = {
'name': TextInput(attrs={
'class': 'input',
'placeholder': 'Dish name'
})
'price': TextInput(attrs={
'class': 'input',
'placeholder': 'Ex: $45,90'
})
}
表单正确呈现,但是在提交时,我被发送到表单模板。我使用jQuery停止了该事件,以查看正在发送的数据,并注意到没有发送class CreateItem(LoginRequiredMixin, PassRequestUserMixin, PermissionRequiredMixin, generic.CreateView):
permission_required = "reg.can_create_item_on_menu"
model = Item
form_class = ItemForm
template_name = 'menu_item_form.html'
context_object_name = 'object_name'
def get_success_url(self, **kwargs):
if kwargs:
return reverse_lazy('reg:item_list', kwargs={'menu_id': self.object.menu.id})
return reverse_lazy('reg:item_list', args=(self.object.menu.id,))
字段。
我在做什么错了?